EasyExcel 通过模板填凑数据

河曲智叟  金牌会员 | 2025-2-12 12:30:14 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 880|帖子 880|积分 2640

EasyExcel 通过模板填凑数据两种方式:1、直接通过模板填充。2、通过IO流填充。
模板示例
注意:单个字段填充只写字段名即可,数据集填充需要在字段前加  .
{title}姓名昵称手机号{.username}{.nickname}{.phone}代码示例:
  1. package com.service.single.example.excel;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.excel.EasyExcelFactory;
  4. import com.alibaba.excel.ExcelWriter;
  5. import com.alibaba.excel.support.ExcelTypeEnum;
  6. import com.alibaba.excel.write.metadata.WriteSheet;
  7. import com.alibaba.excel.write.metadata.fill.FillConfig;
  8. import com.service.single.entity.SystemUser;
  9. import java.io.*;
  10. import java.nio.file.Files;
  11. import java.nio.file.Paths;
  12. import java.time.LocalDateTime;
  13. import java.time.format.DateTimeFormatter;
  14. import java.util.ArrayList;
  15. import java.util.HashMap;
  16. import java.util.List;
  17. import java.util.Map;
  18. /**
  19. * @Author: 一休
  20. * @Date: 2025/2/10
  21. */
  22. public class ExcelTemplate {
  23.     public static void main(String[] args) throws IOException {
  24.         // 准备数据
  25.         List<SystemUser> users = new ArrayList<>();
  26.         SystemUser user1 = new SystemUser();
  27.         user1.setUsername("张三");
  28.         user1.setNickname("zhangsan");
  29.         user1.setPhone("11111");
  30.         users.add(user1);
  31.         SystemUser user2 = new SystemUser();
  32.         user2.setUsername("张三");
  33.         user2.setNickname("zhangsan");
  34.         user2.setPhone("11111");
  35.         users.add(user2);
  36.         // 单个字段填充,使用map格式
  37.         Map<String, Object> otherData = new HashMap<>();
  38.         otherData.put("title", "系统用户表");
  39.         // 模板文件路径
  40.         String templateFileName = "src/main/resources/template.xlsx";
  41.         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
  42.         String formattedDateTime = LocalDateTime.now().format(formatter);
  43.         // 输出文件路径
  44.         String outputFileName = "src/main/resources/filled_template_" + formattedDateTime + ".xlsx";
  45.         // 输出文件路径
  46.         String outputFileName1 = "src/main/resources/filled_template1_" + formattedDateTime + ".xlsx";
  47.         // 1、直接通过文件模板填充
  48.         try (ExcelWriter excelWriter = EasyExcel.write(outputFileName).withTemplate(templateFileName).build();) {
  49.             // 创建写入工作表
  50.             WriteSheet writeSheet = EasyExcel.writerSheet().build();
  51.             // 每次使用 list 参数时创建新行。
  52.             FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
  53.             // 针对某个字段填充
  54.             excelWriter.fill(otherData, fillConfig, writeSheet);
  55.             // 填充集合
  56.             excelWriter.fill(users, fillConfig, writeSheet);
  57.         }
  58.         // 2、通过IO流填充
  59.         try (
  60.                 // 使用 try-with-resources 管理输入流
  61.                 InputStream inputStream = Files.newInputStream(Paths.get(templateFileName));
  62.                 InputStream templateInputStream = new BufferedInputStream(inputStream);
  63.                 ByteArrayOutputStream outputStream = new ByteArrayOutputStream()
  64.         ) {
  65.             try (
  66.                     // 创建 ExcelWriter 对象
  67.                     ExcelWriter excelWriter = EasyExcelFactory.write(outputStream).excelType(ExcelTypeEnum.XLSX).withTemplate(templateInputStream).build()
  68.             ) {
  69.                 WriteSheet writeSheet = EasyExcelFactory.writerSheet().sheetNo(0).build();
  70.                 WriteSheet writeSheet1 = EasyExcelFactory.writerSheet().sheetNo(1).build();
  71.                 FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
  72.                 // 针对某个字段填充
  73.                 excelWriter.fill(otherData, fillConfig, writeSheet);
  74.                 // 填充集合
  75.                 excelWriter.fill(users, fillConfig, writeSheet);
  76.               // 指定sheet填充数据
  77.                 excelWriter.fill(users, fillConfig, writeSheet1);
  78.             }
  79.             try (
  80.                     FileOutputStream fileOutputStream = new FileOutputStream(outputFileName1)
  81.             ) {
  82.                 outputStream.writeTo(fileOutputStream);
  83.                 // 刷新 FileOutputStream 缓冲区,确保数据全部写入文件
  84.                 fileOutputStream.flush();
  85.                 System.out.println("文件生成成功: " + outputFileName1);
  86.             }
  87.         }
  88.     }
  89. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表