1.使用ExcelExportUtil基于模板导出excel数据,listToExcel
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
第一步,导入依赖没啥好说的;
第二步,查询数据库或es数据组装成list对象;
第三步,填充Map<String, Object> excelMap = new HashMap<>();
数据key和excel模板对应,如果一次导出多个,可以用index区分;
HttpServletResponse response;
TemplateExportParams params = new TemplateExportParams("doc/模板路径.xlsx",true);
//上面的步骤都是为了填充数据,看个人需求组装数据结构
try{
Workbook workBook= ExcelExportUtil.exportExcel(params, excelMap);
//删除没有数据的sheet
//workBook.removeSheetAt(workBook.getSheetIndex(entry.getKey()));
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename=" + URLEncoder.encode("模板名称.xlsx", "UTF-8"));
response.flushBuffer();
OutputStream out = response.getOutputStream();
workBook.write(out);
}finally{
workBook.close();
}
2.基于org.apache.poi的XSSFWorkbook导出
第一步,导入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
第二步,上图哈哈
public void ExcelExport(HttpServletResponse response) {
//创建工作簿对象
XSSFWorkbook workbook = new XSSFWorkbook();
//创建工作表
XSSFSheet sheet = workbook.createSheet("sheet1");
//合并单元格(看需求是否需要合并的) 开始行,最后一行,开始列,最后一列
//CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
CellRangeAddress range_1 = new CellRangeAddress(0, 0, 0, 4);
// CellRangeAddress range_2 = new CellRangeAddress(1, 1, 0, 2);
// CellRangeAddress range_2_1 = new CellRangeAddress(1, 1, 3, 4);
sheet.addMergedRegion(range_1);
// sheet.addMergedRegion(range_2);
// sheet.addMergedRegion(range_2_1);
//创建第一行
XSSFRow row_0 = sheet.createRow(0);
XSSFCell cell_0 = row_0.createCell(0);
CellStyle style_0 = workbook.createCellStyle();
//设置水平对齐方式为居中对齐
style_0.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐方式为居中对齐
style_0.setVerticalAlignment(VerticalAlignment.CENTER);
//todo 还可以设置边框的样式,这里只设置了右边的,以此类推
style_0.setBorderLeft(BorderStyle.THIN);
//设置字体样式
Font font_0 = workbook.createFont();
//设置字体大小
font_0.setFontHeightInPoints((short) 20);
//设置加粗
font_0.setBold(true);
//设置字体颜色,这里我用了红色
font_0.setColor(IndexedColors.RED.getIndex());
style_0.setFont(font_0);
//设置单元格样式
cell_0.setCellStyle(style_0);
cell_0.setCellValue("第一行的内容");
//......省略很多内容
//最后设置行的高度和列的宽度
sheet.setDefaultRowHeight((short) 450);
//setColumnWidth(int columnIndex, int width) 哪一列,宽度是多少,注:索引都是从0开始
sheet.setColumnWidth(1, 20 * 256);
response.setContentType("application/octet-stream");
try {
response.setHeader("Content-disposition",
"attachment;filename=" + java.net.URLEncoder.encode("jm.xlsx", "UTF-8"));
response.flushBuffer();
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
就是这么简单 没了