java poi 与jxl_引用 JXL和POI的区别(转)

方法一:

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

import jxl.write.Label;

//创建工作簿

WritableWorkbook book=

Workbook.createWorkbook();

WritableSheet

sheet=book.createSheet("sheet名称",0);//创建第一个sheet

//创建单元格

Label labelC = new Label(x, y,

"单元格内容");//x,y为单元格位置

sheet.addCell(labelC);

//合并单元格

sheet.mergeCells(x1,y1,x2,y2);//合并从(x1,y1)到(x2,y2)的单元格

// 写入Exel工作表

book.write();

// 关闭Excel工作薄对象

book.close();

方法二:

import

org.apache.poi.hssf.usermodel.*;

import

org.apache.poi.hssf.util.Region;

//创建工作簿

HSSFWorkbook book = new

HSSFWorkbook();

//创建工作簿

HSSFSheet sheet =

book.createSheet("sheetName"); //如果是英文名称,不需要下行代码

book.setSheetName(0, "sheet名称",

HSSFWorkbook.ENCODING_UTF_16 );

//打印页面设置

HSSFPrintSetup ps =

sheet.getPrintSetup();

sheet.setMargin(HSSFSheet.BottomMargin,( double ) 0.5 );// 页边距

sheet.setMargin(HSSFSheet.LeftMargin,(

double ) 0.1 );

sheet.setMargin(HSSFSheet.RightMargin,(

double ) 0.1 );

sheet.setMargin(HSSFSheet.TopMargin,(

double ) 0.5 );

ps.setLandscape(true); //

打印方向,true:横向,false:纵向

ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); //纸张

//设置列宽

sheet.setColumnWidth((short)column,(short)width);

//column为列号,width为宽度

//设置字体

HSSFFont cellFont =

book.createFont();

cellFont.secellFontHeightInPoints((short) 24); //字号

cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗

//设置单元格格式

HSSFCellStyle cellStyle =

book.createCellStyle();

cellStyle.secellFont(cellFont);

cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

//左右居中

cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

//上下居中

cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框

cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);

//左边框

cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);

//右边框

cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //上边框

cellStyle.setWrapText(true);//自动换行

//创建行

HSSFRow rowx = sheet.createRow(x);

rowx.setHeight((short)height);

//设置行高

//创建单元格

HSSFCell cellx_y =

rowx.createCell((short) y);

cellx_y.setEncoding(HSSFCell.ENCODING_UTF_16); //设置单元格字符

cellx_y.setCellValue("单元格内容"); //单元格内容

cellx_y.setCellStyle(cellStyle);

//单元格格式

//合并单元格

sheet.addMergedRegion(new

Region(rowfrom,colfrom,rowto,colto));

//写入Exel工作表

book.write(java.io.OutputStream

stream);

三 乱码:

jxl写excel

import jxl.Workbook;

import jxl.read.biff.BiffException;

import jxl.Sheet;

import jxl.write.Label;

import jxl.Cell;

import jxl.write.WritableWorkbook;

import jxl.write.WritableSheet;

import jxl.write.WriteException;

public void exportExcelFile(String outputFile, List dataList)

throws Exception

{

//创建工作表与sheet的引用

WritableWorkbook wb = null;

WritableSheet ws = null;

//直接根据输出的文件创建工作表对象

try

{

wb = Workbook.createWorkbook(new File(outputFile));

//创建第一页的sheet

ws = wb.createSheet(-#34;sheet1-#34;, 0);

//循环导出数据

for (int rowId = 0; rowId -#60; dataList.size(); rowId++)

{

//得到对应行的数据列表

List valueList = (List) dataList.get(rowId);

//循环每一个单元格

for (int column = 0; column -#60; valueList.size(); column++)

{

//得到对应单元格的值

String value = (String) valueList.get(column);

//设置值

Label label = new Label(column, rowId, value);

//加到sheet上

ws.addCell(label);

}

}

//输出到文件

wb.write();

//关闭文件

wb.close();

}

catch(Exception e)

{

}

}

poi 写excel

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public List parseExcelFile( InputStream inputStream ) throws

PMSBusinessException

{

//设置通用对象列表

List dataList = new ArrayList();

List valueList = null;

//以文件流构造workbook

HSSFWorkbook workbook = null;

workbook = new HSSFWorkbook(inputStream);

int sheetNum = workbook.getNumberOfSheets();

//得到第一个sheet对象

HSSFSheet templateSheet = workbook.getSheetAt(1);

HSSFRow templateRow = templateSheet.getRow(0);

//得到总行数

int rowNum = templateSheet.getPhysicalNumberOfRows();

//得到总列数

int columnNum =

templateSheet.getRow(0).getPhysicalNumberOfCells();

//循环每一行

for (int rowId = 0; rowId -#60; rowNum; rowId++)

{

//得到第rowId行对象

HSSFRow hsrow = templateSheet.getRow(rowId);

//创建一个值列表对象 分别存放每一个字段对应的值

valueList = new ArrayList();

//循环每一列

for (int columnId = 0; columnId -#60; columnNum; columnId++)

{

String value = null;

//得到一个单元格

if(hsrow == null)

return dataList;

HSSFCell cell = hsrow.getCell((short) columnId);

//取模板第一个单元格

HSSFCell templateCell = templateRow.getCell((short)

columnId);

//取得列名称

String columnName = templateCell.getStringCellValue().trim();

//只有单元格中有值时才做类型判断

if (cell != null)

{

//得到类型

int cellType = cell.getCellType();

switch (cellType)

{

//如果是空串

case HSSFCell.CELL_TYPE_BLANK :

value = -#34;-#34;;

break;

//如果是布尔型

case HSSFCell.CELL_TYPE_BOOLEAN :

value = cell.getBooleanCellValue() ? -#34;TRUE-#34; :

-#34;FALSE-#34;;

break;

//如果是错误型

case HSSFCell.CELL_TYPE_ERROR :

value = -#34;#ERR-#34; + cell.getErrorCellValue();

break;

//如果是公式型

case HSSFCell.CELL_TYPE_FORMULA :

value = cell.getCellFormula();

break;

//如果是数字型

case HSSFCell.CELL_TYPE_NUMERIC :

//判断一下是否是日期类型

if (HSSFDateUtil.isCellDateFormatted(cell))

{

//转为yyyy-MM-dd格式

DateFormat sdf = new SimpleDateFormat(-#34;yyyy-MM-dd-#34;);

value = sdf.format(cell.getDateCellValue());

}

//否则是数字

else

{

if ( -#34;编号-#34;.equals( columnName )

|| -#34;时限-#34;.equals( columnName ) )

{

//转为整数的字符串

value =-#34;-#34;+(long)cell.getNumericCellValue();

}

//其他全部转为小数型字符串

else

{

value = cell.getNumericCellValue() + -#34;-#34;;

}

}

break;

//字符串型

case HSSFCell.CELL_TYPE_STRING :

value = cell.getStringCellValue();

break;

//其它

default :

value = -#34;Unknown Cell Type: -#34; + cell.getCellType();

}

}

//把转化后的值放入List 这里list中可能放入null 代表没有值

valueList.add(value);

}

}

//返回通用列表全部为String 类型 或 Null

return dataList;

}

导出有模板文件的excel

public void exportStyleFile(String inputFile, String outputFile,

List dataList) throws PMSBusinessException

{

POIFSFileSystem fs = null;

HSSFWorkbook templatewb = null;

//用模板文件构造poi

try

{

fs = new POIFSFileSystem(new FileInputStream(inputFile));

//创建模板工作表

templatewb = new HSSFWorkbook(fs);

}

catch (FileNotFoundException e)

{

e.printStackTrace(System.out);

}

catch (IOException e)

{

e.printStackTrace(System.out);

}

//直接取模板第一个sheet对象

HSSFSheet templateSheet = templatewb.getSheetAt(1);

//得到模板的第一个sheet的第一行对象 为了得到模板样式

HSSFRow templateRow = templateSheet.getRow(0);

//取得Excel文件的总列数

int columns = templateSheet.getRow((short)

0).getPhysicalNumberOfCells();

//创建样式数组

HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];

//一次性创建所有列的样式放在数组里

for (int s = 0; s -#60; columns; s++)

{

//得到数组实例

styleArray[s] = templatewb.createCellStyle();

}

//循环对每一个单元格进行赋值 这里要求模板的列序与list中的值要一一对应

//定位行

for (int rowId = 1; rowId -#60;= dataList.size(); rowId++)

{

//依次取第rowId行数据 每一个数据是valueList

List valueList = (List) dataList.get(rowId - 1);

//定位列

for (int columnId = 0; columnId -#60; valueList.size();

columnId++)

{

//依次取出对应与colunmId列的值

//每一个单元格的值

String dataValue = (String) valueList.get(columnId);

//取出colunmId列的的style

//模板每一列的样式

HSSFCellStyle style = styleArray[columnId];

//取模板第colunmId列的单元格对象

//模板单元格对象

HSSFCell templateCell = templateRow.getCell((short)

columnId);

//创建一个新的rowId行 行对象

//新建的行对象

HSSFRow hssfRow = templateSheet.createRow(rowId);

//创建新的rowId行 columnId列 单元格对象

//新建的单元格对象

HSSFCell cell = hssfRow.createCell((short) columnId);

//如果对应的模板单元格 样式为非锁定

HSSFFont font = templatewb.createFont();

String columnName = templateCell.getStringCellValue().trim();

//如果是不准修改的列则红色显示字体

if(columnId==0 || columnId==1 ||columnId== 2 || columnId==3 ||

columnId == 5 || columnId == 7 || columnId== 13||

columnId==15)

{

//设置此列style为非锁定

//style.setLocked(false);

font.setColor(HSSFFont.COLOR_RED);

style.setFont(font);

//设置到新的单元格上

cell.setCellStyle(style);

}

//否则样式为锁定 普通颜色

else

{

//设置此列style为锁定

//style.setLocked(true);

font.setColor(HSSFFont.COLOR_NORMAL);

style.setFont(font);

//设置到新单元格上

cell.setCellStyle(style);

}

//设置编码

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

//设置值 统一为String

cell.setCellValue(dataValue);

}

}

//设置输入流

FileOutputStream fOut = null;;

try

{

fOut = new FileOutputStream(outputFile);

//将模板的内容写到输出文件上

templatewb.write(fOut);

fOut.flush();

//操作结束,关闭文件

fOut.close();

}

catch (FileNotFoundException e1)

{

e1.printStackTrace(System.out);

}

}

no格式

public void exportExcelFile(String outputFile, List dataList)

//创建工作表

HSSFWorkbook workbook = new HSSFWorkbook();

//创建sheet

HSSFSheet sheet = workbook.createSheet();

//循环导出

for (int rowId = 0; rowId -#60; dataList.size(); rowId++)

{

//取出对应行的数据列表对象

List valueList = (List) dataList.get(rowId);

//从第0行开始创建

HSSFRow hsrow = sheet.createRow(rowId);

//依次写入每一个单元格

for (int columnId = 0; columnId -#60; valueList.size();

columnId++)

{

//得到对应单元格的值

String dataValue = (String) valueList.get(columnId);

//创建该行的单元格

HSSFCell cell = hsrow.createCell((short) columnId);

//设置编码

cell.setEncoding(HSSFCell.ENCODING_UTF_16); //解决中文高位字节截断

//设置值

cell.setCellValue(dataValue);

}

}

//写出到文件

FileOutputStream os;

try

{

os = new FileOutputStream(outputFile);

workbook.write(os);

os.flush();

//关闭文件流

os.close();

}

catch (FileNotFoundException e)

{

e.printStackTrace(System.out);

}

}

Tips:

1.个人认为jxl比poi好用,jxl直接可直接创建单元格,制定位置就行,而poi需先创建行,再建该行中的列,即单元格;

2.网上看到有人问单元格合并后设定的边框怎么就没有了?我也遇到了此问题,原因是合并的单元格没有创建

如cell1(x1,y1)和cell2(x2,y2)合并,我们习惯只创建cell1,并只指定其格式,这样是不对的,需要把与其合并的所有单元格都创建,不要怕麻烦哈,写个循环就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值