使用的库(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();
生成表结构: