java POI官网地址,里面有介绍POI的使用,以及各种例子代码:
Java POI官网
说下在项目开发中遇到的java操作Excel的棘手问题,以及解决方案:
首先记下2007版及以上Excel版本(.xlsx)的文件读取、输出代码:
读取:
public static Workbook getTemplateExcel(String path) {
// 后缀为.xlsx的Excel文件
Workbook workbook = null;
File file = new File(path);
try {
InputStream is = new FileInputStream(file);
workbook = new XSSFWorkbook(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return workbook;
}
输出:
public static boolean outputExcel(Workbook workbook, String outputPath) {
boolean result = false;
File file = new File(outputPath);
try {
OutputStream os = new FileOutputStream(file);
workbook.write(os);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
问题1:给给定单元格设定值时,NullPointException异常
时常,在给Excel指定单元格写入数据的时候,会这样写:
Sheet sheet = workbook.getSheet("test1");
sheet.getRow(0).getCell(0).setCellValue(1);
但是,可能会忽略一点,get到的Cell是否为null值,所以会空指针异常
所以代码需要这样写:
Sheet sheet = workbook.getSheet("test1");
if (sheet.getRow(0) == null) {
sheet.createRow(0);
if (sheet.getRow(0).getCell(0) == null) {
sheet.createRow(0).createCell(0);
}
}
sheet.getRow(0).getCell(0).setCellValue(1);
问题2:当模版Excel里面有公式计算的时候,需要给指定单元格设值,输出的Excel公式没起作用
模版sheet中,有公式:
Excel输出后:
代码如下:
Workbook workbook = ExcelUtil.getTemplateExcel(DefinedValue.INPUT_PATH + "test.xlsx");
Sheet sheet = workbook.getSheet("test1");
Row row0 = sheet.createRow(0);
Row row1 = sheet.createRow(1);
row0.createCell(0);
row0.createCell(1);
row0.createCell(2);
row1.createCell(0);
row1.createCell(1);
row1.createCell(2);
sheet.getRow(0).getCell(0).setCellValue(1);
sheet.getRow(0).getCell(1).setCellValue(2);
sheet.getRow(0).getCell(2).setCellValue(3);
sheet.getRow(1).getCell(0).setCellValue(1.1);
sheet.getRow(1).getCell(1).setCellValue(2.2);
sheet.getRow(1).getCell(2).setCellValue(3.3);
ExcelUtil.outputExcel(workbook, DefinedValue.OUTPUT_PATH + "t1.xlsx");
所以,需要在输出之前加入这样一句话,即可:
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
问题3:POI设定单元格下拉框,如果设置长度超过255,输出的Excel,在打开时会出错(文件有不可读取的地方)
代码设置单元格下拉框代码(官网代码):
这样输出的文件,如果被设定单元格字符长度(下拉菜单所有item的长度)总共超过255,这样设置会出错,但官网又给了另外一套处理方案,那就是将要被设定的List值先设置到Excel的隐藏sheet里面,然后读取到单元格中,代码如下:
如果,还有朋友碰到过POI中遇到的棘手问题,可以下方留言,以及解决方案,感谢