POI简单使用说明
1 依赖关系
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
2 主要操作对象
WorkBook : excel文件
Sheet : excel的sheet
Row : sheet里的一行
cell:row里的单元格
POI对于2007以前的版本有一套类,2007以后有一套类,这两套类区别在于首字母一个是X,一个是H,但均实现了上面的对应的接口,所以可以统一操作,无需关注这些细节。
3 上例子
public static void main(String[] args) throws Exception {
String filePath = "e:/test.xlsx";
Workbook book = new XSSFWorkbook();
// 写数据到excel
Sheet sheet = book.createSheet("poi测试demo");
int totalRow = sheet.getPhysicalNumberOfRows();
Row row = sheet.createRow(totalRow);
row.createCell(0).setCellValue("序号");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("多年以后,面对行刑队,奥里雷亚诺.布恩迪亚上校将会回想起父亲带他去见识冰块的那个遥远的下午");
row.createCell(4).setCellValue(4);
//中文自适应宽度
int length = row.getCell(3).getStringCellValue().getBytes("UTF-8").length * 256;
sheet.setColumnWidth(3,length);
FileOutputStream fos = new FileOutputStream(filePath);
book.write(fos);
book.close();
fos.close();
BufferedInputStream ins = new BufferedInputStream(new FileInputStream(filePath));
Workbook readBook = WorkbookFactory.create(ins);
//从excel读数据
sheet = readBook.getSheetAt(0);
row = sheet.getRow(0);
String value = row.getCell(3).getStringCellValue();
System.err.println(value);
readBook.close();
}
需要注意是
使用Workbook readBook = WorkbookFactory.create(ins); 这句可以屏蔽xls与xlsx的差异,统一使用Workbook来操作。
中文自适应宽度需要注意下,需要手动设置其宽度,设置cell宽度自适应只对英文有效。
列宽度的操作应该在所以数据填写完毕后完成,否则会有性能损失。