Excel 97~XP 統稱 BIFF8 格式。POI 實現稱為 HSSF(Horrible SpreadSheet Format),基於 POIFS(OLE 2 複合文檔系統)。
Workbook → Sheet → Row → Cell 物件樹,整個文檔載入內存,易用但佔內存。InputStream is = new FileInputStream("workbook.xls");
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(2);
HSSFCell cell = row.getCell((short)3);
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
System.out.println(cell.getStringCellValue());
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
}
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow((short)0);
row.createCell((short)0).setCellValue(1);
row.createCell((short)1).setCellValue(1.2);
row.createCell((short)2).setCellValue("字符串");
row.createCell((short)3).setCellValue(true);
// 樣式復用
HSSFCellStyle style = wb.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
style.setFillBackgroundColor(HSSFColor.AQUA.index);
cell.setCellStyle(style);
FileOutputStream out = new FileOutputStream("workbook.xls");
wb.write(out);
out.close();
cell.setCellFormula("SUM(A1:A2)"),支持內建函數與運算符,邏輯函數(IF)尚在開發中,生產環境需充分測試。
Excel 內部以數值存儲日期,需結合 HSSFDateUtil.isCellDateFormatted(cell) 判斷,否則易誤讀為數字。