使用的库(org.apache.poi)
在poi包中有Apache提供的各种分类文件,如下
结构 | 功能 |
---|---|
HSSF | 读写Microsoft Excel XLS文件 |
XSSF | 读写Microsoft Excel OOXML XLSX文件 |
HWPF | 读写Microsoft Word DOC文件 |
HSLF | 读写Microsoft PowerPoint文件 |
下面以XSSF为例,该结构中有不同的类分别对应XLSX文件的不同结构:
类org.apache.poi.xssf.usermodel | 对应结构 |
---|---|
XSSFWorkbook | 工作簿 |
XSSFSheet | 工作表 |
XSSFROW | 表中的行 |
XSSFCell | 行中的单元格 |
创建表结构的流程:
从数据库中查询出List<实体类>的集合(查询数据,待处理)、创建工作薄对象、通过工作薄对象创建工作表对象、通过工作表对象创建工作行对象、通过工作行对象创建单元格对象、创建输出流、输出、刷新并关闭流资源、关闭工作薄资源。
每个阶段所创建的对象都会有不同的方法,用来规定工作表的格式信息等。
简单的创建过程演示:
数据库数据结构:
//利用利用Mapper(使用Mybatis-plus)从数据库中查处数据并封装到List中
List<Lover> lovers = loverService.getLovers();
//创建工作薄对象
XSSFWorkbook xwb = new XSSFWorkbook();
//创建工作表对象,并规定工作表名称
XSSFSheet sheet = xwb.createSheet("测试表");
//这里可以利用sheet对象规定和并单元格等等信息
//根据工作表对象创建工作行,下标指定第几行
XSSFRow xssfRow = sheet.createRow(0);
//给第一行创建单元格并添加列名
xssfRow.createCell(0).setCellValue("序号");
xssfRow.createCell(1).setCellValue("账号");
xssfRow.createCell(2).setCellValue("密码");
//创建第二行的对象
XSSFRow xssfRow1 = sheet.createRow(1);
//创建第二行的单元格对象,并填充内容,这里因为List中只有一个Lover对象,所以采用比较取巧的办法,没有用增强for循环
xssfRow1.createCell(0).setCellValue(lovers.get(0).getId());
xssfRow1.createCell(1).setCellValue(lovers.get(0).getName());
xssfRow1.createCell(2).setCellValue(lovers.get(0).getPassword());
//创建输出流,规定输出路径
OutputStream ops = new FileOutputStream("/Users/chenpei/Downloads/sendMysqlTableDir/new/ExcelTestDir");
//利用工作薄对象写出
xwb.write(ops);
//刷新流、关闭流、关闭工作薄
ops.flush();
ops.close();
xwb.close();
生成表结构: