本次任务主要实现两个功能,一是如何将Excel文件导入后台服务器,解析文件中的内容,并且存入数据库中。二是如何将后台数据库中的数据导出为Excel表格。经过调研,实现此功能常使用的是POI技术。
一、POI技术概述
- POI介绍
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。官方API地址:
- POI结构说明
- 结构:
HSSF - 提供读写Microsoft Excel(Excel 2003)格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML(Excel 2007)格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
- 常用类:
HSSFWorkbook - Excel的文档对象。
HSSFSheet - Excel的表单。
HSSFRow - Excel的行。
HSSFCell - Excel的单元格。
HSSFFont - Excel的字体。
HSSFDataFormat - 格子单元的日期格式。
HSSFHeader - Excel文档Sheet的页眉。
HSSFFooter - Excel文档Sheet的页脚。
HSSFCellStyle - Excel的单元格样式。
HSSFDateUtil - 日期。
HSSFErrorConstants - 错误信息表。
- Excel的基本操作
- 创建Workbook和sheet
HSSFWorkbook wb = new HSSFWorkbook(); //excel2003
HSSFSheet sheet = wb.createSheet("测试表格");
XSSFWorkbook wb = new XSSFWorkbook(); //excel2007
XSSFSheet sheet = wb.createSheet("测试表格");
- 创建单元格
XSSFRow row = null;
row = sheet.createRow(0); //创建第一行
row.createCell(0).setCellValue("用户信息列表"); //为第一个单元格设值
String id = row.getCell(0).getStringCellValue();//得到第一行第一个单元格的值
- 单元格设置
row.setHeight((short)(22.5 * 20)); //设置行高
- 合并单元格
CellRangeAddress rowRegion = new CellRangeAddress(0,0,0,3);
//CellRangeAddress(firstRow,lastRow,firstCol,lastCol)
sheet.addMergedRegion(rowRegion);
这里仅列出最基本的操作,更多操作详见POI的官方文档。
二、Spring Boot整合POI实例
首先要在pom.xml文件中添加依赖
- 数据导出为Excel
- 实现逻辑
将数据导出,需先将数据库所需要导出的数据查询出来,放在一个List当中;然后创建Excel表格,创建单元格,设置标题,设置列头等等;然后将List中的数据动态的存入表格的每一行;最后使用输出流将Excel导出。
这里需要注意的是向单元格输入每一行数据的顺序要和设置的列头对应。
- 实现效果
数据库中的内容:
导出内容:
- Excel文件内容导入数据库
- 实现逻辑
后台接收前台的文件后需要先判断后缀名是.xls还是.xlsx,以此来建不同的对象;动态获取每一行中每个单元格的值,存入User类对象中;将对象存入数据库。
这里需要注意的是获取单元格的值之前,需要先将单元格中值的格式转变成String类型。因为Excel文件会对输入的内容自动设置类型,比如输入数字,Excel会自动将此设为数字类型,但如果数据库中定义的是String类型,会导致类型不统一。所以最好在获取之前统一类型。
- 实现效果:
Excel文件内容:
选择文件:
后台输出:
存入数据库:
代码下载地址:https://download.csdn.net/download/lx1018662973/10862815