java根据模板生成excel(占位符)

1.依赖

 <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>2.2.4</version>
            </dependency>

2.demo

    public static void main(String[] args) {
        // 模板文件
        String templateFile = "D:/project1/data/template/测试模板.xlsx";
        // 结果文件,省去了根据模板文件生成的步骤
        String resultFile = "D:/project1/data/export/测试生成.xlsx";
        // 根据模板文件生成目标文件
        ExcelWriter excelWriter = EasyExcel
                .write(resultFile)
                .withTemplate(templateFile)
                // 单独设置单元格格式
//                .registerWriteHandler(new CellStyleHandler())
                .build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        // 每次都会重新生成新的一行,而不是使用下面的空行
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        // 第一种占位符替换
        Map<String, Object> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        map.put("reportDate", "11111");
        map.put("reportDate1", "222222");
        excelWriter.fill(map, writeSheet);
        excelWriter.finish();
    }

3.模板使用{}占位符
在这里插入图片描述

4.生成效果:在这里插入图片描述

### Java 使用 Excel 模板并处理占位符的方法或库 在 Java 中,可以使用多种库来处理 Excel 模板并替换占位符。以下是一些常用的库及其使用方法: #### 1. **EasyExcel** `EasyExcel` 是阿里巴巴开源的一个轻量级 Excel 处理工具,支持模板填充和占位符替换。以下是基于模板填充的代码示例[^1]: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.fill.FillConfig; import java.util.HashMap; import java.util.Map; public class EasyExcelTemplateExample { public static void main(String[] args) { // 模板文件路径 String templateFile = "D:/project1/data/template/测试模板.xlsx"; // 结果文件路径 String resultFile = "D:/project1/data/export/测试生成.xlsx"; // 创建 ExcelWriter 并加载模板 ExcelWriter excelWriter = EasyExcel.write(resultFile) .withTemplate(templateFile) .build(); // 构建写入的工作表 com.alibaba.excel.write.metadata.WriteSheet writeSheet = EasyExcel.writerSheet().build(); // 配置是否强制生成新行 FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); // 定义占位符替换的数据 Map<String, Object> map = new HashMap<>(); map.put("reportDate", "2024-05-14"); map.put("reportDate1", "2024-05-15"); // 填充数据到模板 excelWriter.fill(map, fillConfig, writeSheet); // 关闭 writer excelWriter.finish(); } } ``` 上述代码中,`map` 对象用于存储占位符名称与对应的值,`fill` 方法会将这些值填充到模板中的占位符位置。 --- #### 2. **Apache POI** `Apache POI` 是一个功能强大的 Java 库,支持对 Excel 文件进行读取、写入和修改。以下是基于 Apache POI 的占位符替换示例[^3]: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ApachePoiTemplateExample { public static void main(String[] args) throws IOException { // 模板文件路径 String templateFile = "D:/project1/data/template/测试模板.xlsx"; // 结果文件路径 String resultFile = "D:/project1/data/export/测试生成.xlsx"; // 加载模板文件 try (FileInputStream fis = new FileInputStream(templateFile); Workbook workbook = new XSSFWorkbook(fis)) { // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 定义占位符替换规则 Pattern pattern = Pattern.compile("\\$\\{([^}]*)\\}"); Map<String, String> replacements = Map.of( "reportDate", "2024-05-14", "reportDate1", "2024-05-15" ); // 遍历所有单元格并替换占位符 for (Row row : sheet) { for (Cell cell : row) { if (cell.getCellType() == CellType.STRING) { String originalValue = cell.getStringCellValue(); Matcher matcher = pattern.matcher(originalValue); StringBuilder sb = new StringBuilder(); int lastEnd = 0; while (matcher.find()) { sb.append(originalValue, lastEnd, matcher.start()); String placeholder = matcher.group(1); sb.append(replacements.getOrDefault(placeholder, matcher.group())); lastEnd = matcher.end(); } sb.append(originalValue.substring(lastEnd)); cell.setCellValue(sb.toString()); } } } // 将结果保存到新文件 try (FileOutputStream fos = new FileOutputStream(resultFile)) { workbook.write(fos); } } } } ``` 上述代码通过正则表达式匹配模板中的占位符(如 `${reportDate}`),并将其替换为实际值。 --- #### 3. **JXL** `JXL` 是另一个用于处理 Excel 文件的 Java 库,但其功能相对有限,且不支持 `.xlsx` 格式文件。如果项目仅需处理 `.xls` 文件,可以考虑使用 JXL。 --- #### 4. **Freemarker + Apache POI** 结合 `Freemarker` 和 `Apache POI` 可以实现更复杂的模板渲染逻辑。以下是基本思路: - 使用 `Freemarker` 生成带有占位符Excel 内容。 - 使用 `Apache POI` 将生成的内容写入 Excel 文件。 --- ### 总结 - 如果需要快速实现模板填充,推荐使用 `EasyExcel`。 - 如果需要更灵活的功能(如复杂公式处理),推荐使用 `Apache POI`[^3]。 - 如果需要复杂的模板渲染逻辑,可以结合 `Freemarker` 和 `Apache POI`。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值