excel类型
excel分为03版本和07版本
- 03版本 new HSSFWorkbook();
优点:速度快
缺点:只能写入65536行数据
文件类型:.xls - 07版本 new XSSFWorkbook();
优点:不限制写入数量
缺点:容易造成内存溢出(OOM),速度慢
文件类型:.xlsx - 07加速版 new SXSSFWorkbook();
在写入过程中会产生临时文件,需要手动清除:((SXSSFWorkbook)wb).dispose();
文件类型:.xlsx
依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
写入
private static void write(){// 创建一个工作簿Workbook wb = new HSSFWorkbook();// 创建一个工作表Sheet sheet = wb.createSheet("sheet页名称");// 创建一行Row row = sheet.createRow(0);// 创建一个单元格Cell cell = row.createCell(0);// 生成一张表FileOutputStream outputStream = new FileOutputStream(PATH + "demo.xls");wb.write(outputStream);
}
读取
private static void read(){FileInputStream inputStream = new FileInputStream(PATH + "demo.xls");Workbook wb = new HSSFWorkbook(inputStream);Sheet sheet = wb.getSheetAt(0);Row row = sheet.getRow(0);Cell cell = row.getCell(0);// 获取sheet页总行数int rowCount = sheet.getPhysicalNumberOfRows();// 获取一行的列数int cellCount = row.getPhysicalNumberOfCells();// 获取单元格的数据类型CellType cellType = cell.getCellType();switch (cellType) {case STRING:cell.getStringCellValue();break;// 读字符串case BOOLEAN:cell.getBooleanCellValue();break;// 读布尔值case FORMULA:cell.getCellFormula();break;// 读公式case BLANK:break;case ERROR:break;case NUMERIC:if (HSSFDateUtil.isCellDateFormatted(cell)) {cell.getDateCellValue();// 读日期} else {// 为防止数字过长,将数字以字符串的格式输出cell.setCellType(CellType.STRING);cell.getStringCellValue();}break;}
}
计算公式
// 创建公式计算器
FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) wb);
// 执行计算
CellValue evaluate = formulaEvaluator.evaluate(cell);
evaluate.formatAsString();
03、07通用版