一、背景
当前B/S模式已经成为应用开发的主流模式,而在企业办公中,常常会遇到需要将统计报表导出和将整理好的数据导入系统的需求,最近刚好遇到了一个这样的需求,现将已经做完的代码分享出来。
二、导入导出
1、导入
导入功能相对比较简单,只需要在接口使用MultipartFile类型接收前台传过来的文件即可,然后将此文件转存到本地文件中,我是这么处理的,仅供参考,实现方式多样,然后就可以调用excel工具类了。
2、导出
导出的时候需要进行一些设置,并且最终将文件以流的形式输出到response的OutPutStream当中,这样浏览器调用的时候可以直接下载到浏览器中,设置如下图所示:
三、依赖
本项目使用的是gradle, 依赖如下:
implementation('org.apache.poi:poi:3.17')
implementation('org.apache.poi:poi-ooxml:3.17')
implementation('org.apache.poi:ooxml-schemas:1.3')
四、Excel工具类
先澄清一个概念导出excel表中的表头以及标题栏,如下图所示
工具类如下:
package com.physical.examination.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.LoggerFactory;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import org.slf4j.Logger;
/**
* excel文件工具类
*
* @author amx
*/
public class ExcelUtil {
static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
private static final String EXCEL_XLS = "xls";
private static final String EXCEL_XLSX = "xlsx";
/**
* 写入多sheet的Excel(带标题栏) List每一项为一个sheet
* list对应excel文件,第二层Iterable对应sheet页,第三层map对应sheet页中一行
*
* @param excelResult 写入数据List
* @param finalXlsxPath excel文件路径
*/
public static void writeExcel(List>> excelResult, String finalXlsxPath) {
OutputStream out = null;
try {
File file = new File(finalXlsxPath);
// 手动创建还是自动创建?
if (!file.exists()) {
FileOutputStream fileOut = new FileOutputStream(finalXlsxPath);
if (finalXlsxPath.endsWith(EXCEL_XLS)) {
HSSFWorkbook wb1 = new HSSFWorkbook();
wb1.write(fileOut);
fileOut.close();
wb1.close();
} else if (finalXlsxPath.endsWith(EXCEL_XLSX)) {
XSSFWorkbook wb2 = new XSSFWorkbook();
wb2.write(fileOut);
fileOut.close();
wb2.close();
}
}
File finalXlsxFile = new File(finalXlsxPath);
Workbook workBook = getWorkbook(finalXlsxFile);
for (int i = 0; i < excelResult.size(); i++) {
Sheet sheet = workBook.createSheet();
List
五、后记
以上代码都已在实际项目测试过,如果有问题或者可以优化的地方,还请留言指正。