JavaPOI

在POI工具中,我们==工作簿==对象叫Workbook,包含对象有:工作簿,工作表,行,列

导入依赖

xml
<!--xls(03版本,最多存取65536行)-->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>5.3.0</version>
  <scope>compile</scope>
</dependency>
<!--xlsx(07版本这个依赖实际含有上面那个依赖)-->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.3.0</version>
</dependency>

在POI工具中,我们工作簿对象叫Workbook,包含对象有:工作簿工作表,,

image-20240921195649478

这里可以看到工作簿有三个实现类

实现类含义
HSSFWorkbook03版本工作簿,行数最多25565行
XSSFWorkbook07版本工作簿,行数无上限
SXSSFWorkbook07版本的super版本,加强了内存管理

基本使用(创建)

java
public static void main(String[] args) throws IOException {
    //1、创建工作簿
    Workbook wb = new HSSFWorkbook();
    //2、创建工作表
    Sheet sheet = wb.createSheet("Test");
    //3、创建一行
    Row row = sheet.createRow(0);
    //4、创建一个单元格(第一列)
    Cell cell = row.createCell(0);
    //5、写入数据(第一个单元格)
    cell.setCellValue("Hello World");
    //6、生成一张表
    FileOutputStream outputStream = new FileOutputStream("/sheet.xls");
    wb.write(outputStream);
    //7、关闭流
    outputStream.close();
}
/**
*	07版本需要修改的:
*	HSSFWorkbook-->XSSFWorkbook
*	sheet.xls-->sheet.xlsx
*/

大文件写SXSSF

优点:可以写非常大的数据量,100万,写数据速度快,占用更少内存

注意

过程中会产生临时文件,需要清理临时文件

默认由100条记录保存在内存中,如果超过这个数量,则最前面的数据被写入临时文件

如果想自定义存在内存中的数量,可以使用new SXSSFWorkbook(数量)

工作簿使用close方法的同时会清理临时文件

基本读

需要进行特殊处理,表格中数据含有不同类型,因此不能都是用String接收,必须指定读取的方式

读取的过程中,可能有的单元格是公式,直接读取到没有意义,需要转换

下面这个枚举类列举了所有的单元格类型

image-20240921203549992

类型名解释
_NONE-1表示单元格类型未知或不适用。
NUMERIC0表示单元格包含数值类型的数据,可以是整数、浮点数等。(数字、日期等)
STRING1表示单元格包含字符串类型的数据,即文本。
FORMULA2表示单元格包含公式,用于计算结果。
BLANK3表示单元格为空,没有数据。
BOOLEAN4表示单元格包含布尔值,即真(True)或假(False)。
ERROR5表示单元格包含错误值,如除以零的错误或其他公式错误。

一般读取

java
public static void main(String[] args) throws IOException {
    FileInputStream inputStream = new FileInputStream("/sheet.xlsx");
    //1、读取工作簿
    Workbook wb = new XSSFWorkbook(inputStream);
    Sheet sheet = wb.getSheetAt(0);
    Row row1 = sheet.getRow(0);
    Cell cell1 = row1.getCell(0);
    CellType type = cell1.getCellType();
    String value = cell1.getStringCellValue();
    System.out.println(value);
}

计算公式处理:

public static void main(String[] args) throws IOException {

    FileInputStream inputStream = new FileInputStream("/sheet.xls");
    HSSFWorkbook wb = new HSSFWorkbook(inputStream);
    Sheet sheet = wb.getSheetAt(0);
    Row row1 = sheet.getRow(0);
    Cell cell1 = row1.getCell(0);
    HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(wb);
    CellValue cellValue = evaluator.evaluate(cell1);
    System.out.println(cellValue.getNumberValue());

}

评论

评论加载中……