Excel下载
(持续更新)
Excel按模板下载
这个比较简单,可以直接参考EasyExcel的模板填充功能。
文档地址:easyexcel.opensource.alibaba.com/docs/curren…
Excel单模板生成多个sheet
本次遇到的问题是,要用一个模板生成数量未知的sheet,用easyexcel尝试了几次无果,转换思路为,将这个模板复制n份,使得每个sheet都有一个这样的模板,随后可以用easyexcel去对这些模板进行填充。
使用poi复制sheet内容代码如下,可以按需修改:
public static void copySheetNtimes(String filePath, int n) throws IOException {
try (FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = new XSSFWorkbook(fis)) {
// 获取第一个 Sheet
Sheet originalSheet = workbook.getSheetAt(0);
String originalSheetName = originalSheet.getSheetName();
for (int i = 0; i < n; i++) {
// 复制 Sheet 并重命名
Sheet newSheet = workbook.createSheet(originalSheetName + "_copy" + (i + 1));
copySheetContent(originalSheet, newSheet);
}
// 保存文件
try (FileOutputStream fos = new FileOutputStream(filePath)) {
workbook.write(fos);
}
}
}
private static void copySheetContent(Sheet sourceSheet, Sheet targetSheet) {
// 复制合并单元格
for (int i = 0; i < sourceSheet.getNumMergedRegions(); i++) {
targetSheet.addMergedRegion(sourceSheet.getMergedRegion(i));
}
for (int i = 0; i <= sourceSheet.getLastRowNum(); i++) {
Row sourceRow = sourceSheet.getRow(i);
Row targetRow = targetSheet.createRow(i);
if (sourceRow != null) {
for (int j = 0; j < sourceRow.getLastCellNum(); j++) {
Cell sourceCell = sourceRow.getCell(j);
Cell targetCell = targetRow.createCell(j);
if (sourceCell != null) {
// 复制单元格样式
targetCell.setCellStyle(sourceCell.getCellStyle());
// 复制单元格值
switch (sourceCell.getCellType()) {
case STRING:
targetCell.setCellValue(sourceCell.getStringCellValue());
break;
case NUMERIC:
targetCell.setCellValue(sourceCell.getNumericCellValue());
break;
case BOOLEAN:
targetCell.setCellValue(sourceCell.getBooleanCellValue());
break;
case FORMULA:
targetCell.setCellFormula(sourceCell.getCellFormula());
break;
default:
targetCell.setCellValue(sourceCell.getStringCellValue());
break;
}
}
}
}
}
}
easyexcel填充方法:
使用for循环填充,核心代码示例(填充模板等见文档内容)
ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
for (int i = 1; i <= 3; i++) {
// 为每个 Sheet 创建新的 ExcelWriter 并加载模板
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet" + i).build();
// 填充数据
excelWriter.fill(new FillWrapper("data1", data1()), fillConfig, writeSheet);
excelWriter.fill( data2(), writeSheet);
}