java操作表格
easyExcle在线文档
POI
<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.17</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
创建表
- 创建一个表写入数据:
- 03版本:最多65536行数据(new HSSFWorkbook())xls文件名后缀
- 07版本:无限制行数据:(new XSSFWorkBook())xlsx文件名后缀
public void test03(){
WorkBook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("表名");
Row rol1 = sheet.createRow(0);
Cell cell = rol1.createCell(0);
cell.setCellValue("数据");
String s = new DataTime().toString("yyyy-MM-dd HH:mm:ss");
FileOutputStream file = new FileOutputStream("path/name.xsl");
workBook.write(file);
file.close();
}
- 数据批量导入:
- HSSF
- 最多只能处理65536行数据
- 过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快
- XSSF
- 速度慢,耗内存,也会发生内存溢出
- 可以写较大的数据量
- SXSSF
- 加速版的XSSF
- 过程中会产生临时文件,需要清理临时文件
- 默认100条记录保存在内存中,超过写入
- 如果要自定义内存中的数据量:new SXSSFWorkBook(数量);
- 清除临时文件:==((SXSSFWorkBook)workBook).dispose();
读取表
public void test03(){
FileInputStream file = new FileInputStream("path/name.xsl");
WorkBook workbook = new HSSFWorkbook(file);
Sheet sheet = workbook.getSheetat("表名");
Row rol1 = sheet.getRow(0);
Cell cell = rol1.getCell(0);
System.out.println(cell.getNumericCellValue());
file.close();
}
- 表格中的不同类型的获取
- 得到列数:row.getPhysicalNumberOfCells();
- 得到行数:sheet.getPhyscicalNumperOfRows();
- String类型数据获取:cell.getStringCellValue();
- 对于不知道数据类型的匹配列数据类型
if (row.getCell(k) != null) {
switch (row.getCell(k).getCellType()) {
case Cell.CELL_TYPE_BOOLEAN://布尔
System.out.println(row.getCell(k).getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:{
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
cellValue = new DateTime(date).toString("yyyy-MM-dd");
} else {
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cellValue = cell.toString();
}
break;
}
case Cell.CELL_TYPE_STRING://字符串
System.out.println(row.getCell(k).getStringValue());
break;
case Cell.CELL_TYPE_BLANK://空
break;
case Cell.CELL_TYPE_ERROR://错误
System.out.println(row.getCell(k).getErrorCellValue());
break;
case Cell.CELL_TYPE_FORMULA://公式
System.out.println(evaluator.evaluate(row.getCell(k)).getNumberValue());
break;
}
System.out.print(row.getCell(k) + "\t");
} else {
System.out.print("\t");
}
- 计算公式的使用
- 得到计算工具:FormulaEvaluatornew formulaEvaluator = HSSFFormulaEvaluator((HSSFWorkBook)workBook);
- 得到表格公式:String formula=cell.getCellFormula()
- 计算表格:CellValue evaluate = formulaEvaluator.evaluate(cell)
- 转换为字符串:String cellValue = evaluate.formatAsString();
easyExcel
参考文档