Apache POI提供了强大的操作Microsoft Office文档的功能。在实际工作中,常常使用Excel文件来存储数据。利用POI,可以方便地对Excel文档进行读写,进而实现对数据的处理与存储。本文将介绍使用POI实现对Excel文件的基本读写功能。POI对Excel的工具包可以在http://poi.apache.org/download.html下载。POI对Excel的处理分为两类:HSSF和XSSF,前者用于处理97-03版的Excel文件(.xls),XSSF用于处理07版的Excel文件。
首先是写入功能,生成的目标文件如下:
文本的内容很简单,创建一个“数学成绩”表,然后录入两位同学的成绩。实现方法如下:
public void write() throws IOException { Workbook wb = new HSSFWorkbook(); //创建工作簿 Sheet sheet = wb.createSheet("数学成绩"); //创建sheet Row row = sheet.createRow(0); //创建第一行 Cell cell11 = row.createCell(0); //第一行第一列 cell11.setCellValue("小明"); //写入值:小明 Cell cell12 = row.createCell(1); //第一行第二列 cell12.setCellValue(90); //写入值:90 Row row2 = sheet.createRow(1); //创建第二行 Cell cell21 = row2.createCell(0); //第二行第一列 cell21.setCellValue("小华"); //写入值:小华 Cell cell22 = row2.createCell(1); //第二行第二列 cell22.setCellValue(80); //写入值:80 FileOutputStream fileOut = new FileOutputStream("d:/test.xls"); wb.write(fileOut); fileOut.close(); }
这样就实现了写入功能。这里的数据非常简单,如果是大量录入,可以通过循环等方式减少代码的重复量。如果还需要录入"英语成绩",只需要创建对应的表wb.createSheet("英语成绩")并写入数据即可。
Excel文件内容的读取同样简单,找到对应的sheet,然后定位到目标cell即可。需要注意的是,读取Cell内容前需要对Cell中的内容的类型进行判断,也就是说,需要提前检查该数据是字符串、数字、日期等,如果不做检查,则可能在读取的过程中发生错误。下面的代码实现了对上面创建的文件内容的读取。
public void read() throws IOException {
InputStream inp = new FileInputStream("d:/test.xls");
HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
Sheet sheet = wb.getSheet("数学成绩");
for (Row row : sheet) {
for (Cell cell : row) {
CellReference cellRef = new CellReference(row.getRowNum(),cell.getColumnIndex());
System.out.print(cellRef.formatAsString());
System.out.print(" - ");
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
}
}
}
除了基本的读写功能,POI还提供了一系列操作Excel文件的功能,例如字体、背景、表格大小的控制和自适应等等,后面再做进一步的介绍。