poi使用问题总结
poi是由apache开发的分析微软office文档的工具包,其中比较常用的是excel组件。以下总结遇到的几个问题。
1.兼容07和03时的bug
public static Workbook getWorkbook(InputStream is) { Workbook wb = null; try { // 2007 wb = new XSSFWorkbook(is); } catch (Exception e) { // 2003 try { wb = new HSSFWorkbook(is); } catch (Exception ex) { ex.printStackTrace(); } } return wb; }当读取03的xls时,会报错:
java.io.IOException: Read error
原因:is流已经被XSSFWorkbook读取了,所以is流再给HSSFWorkbook读取时就会出现问题。
解决:
public static Workbook getWorkbook(byte[] data) { Workbook wb = null; try { // 2007 wb = new XSSFWorkbook(new ByteArrayInputStream(data)); } catch (Exception e) { // 2003 try { wb = new HSSFWorkbook(new ByteArrayInputStream(data)); } catch (Exception ex) { ex.printStackTrace(); } } return wb; }2.使用foreach读取row时不返回空白单元格
for(Row row : sheet) {}比如内容为:
账号 密码 昵称 性别
1 123 a 1
2 123 1
第一行row返回[1,123,a,1]
第二行row返回[1,123,1],注意这里跳过了昵称。
要返回每个单元格的内容,必须使用row.getCell(序号)的方式,比如:
nameCell=row.getCell(0);pwdCell=row.getCell(1);nicknameCell=row.getCell(2);genderCell=row.getCell(3);
如果cell为null,就表示空白。