Java通过模板替换实现excel的传参填写方式

 更新时间:2025年12月11日 14:09:39   作者:yui方木  
文章介绍了使用Java模板替换功能来实现Excel文件的传参填写,通过将模板中的占位符(如$)进行转义和替换,可以动态生成包含具体数据的Excel文件,这种方法适用于需要批量生成带有个性化数据的Excel文档的场景

Java通过模板替换实现excel传参填写

以模板为例子

将上面$转义的内容替换即可

package com.gxuwz.zjh.util;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Component;

/**
 * @author FangZenglin
 * @date 2023年10月12日17:27
 */
@Component
public class ExcelZiDongTian {
    public  void xieexcel_qitajia(String exceldizhi,
                                  String danwei,
                                  String xingming,
                                  String date,
                                  String zhiwu,
                                  String shiyou,
                                  String leixing,
                                  String baocundizhi) throws IOException {

        FileInputStream templateFile = new FileInputStream(exceldizhi);
        Workbook workbook = new XSSFWorkbook(templateFile);
        templateFile.close();

        Sheet sheet = workbook.getSheetAt(0);

        Map<String, String> data = new HashMap<>();
        data.put("danwei", danwei);
        data.put("xingming", xingming);
        data.put("date", date);
        data.put("zhiwu", zhiwu);
        data.put("shiyou", shiyou);
        data.put("leixing", leixing);
        for (Row row : sheet) {
            for (Cell cell : row) {
                String cellValue = cell.getStringCellValue();
                if (cellValue.startsWith("$")) {

                    String key = cellValue.substring(1);

                    if (data.containsKey(key)) {
                        cell.setCellValue(data.get(key));
                    }
                }
            }
        }

        FileOutputStream outputStream = new FileOutputStream(baocundizhi);
        workbook.write(outputStream);
        workbook.close();
    }


    public  void xieexcel_nianjia(String exceldizhi,
                                  String danwei,
                                  String shoucigongzuonianyue,
                                  String gongling,
                                  String quxiang,
                                  String xingming,
                                  String date,
                                  String zhiwu,
                                  String leixing,
                                  String baocundizhi) throws IOException {

        FileInputStream templateFile = new FileInputStream(exceldizhi);
        Workbook workbook = new XSSFWorkbook(templateFile);
        templateFile.close();

        Sheet sheet = workbook.getSheetAt(0);

        Map<String, String> data = new HashMap<>();
        data.put("danwei", danwei);
        data.put("xingming", xingming);
        data.put("date", date);
        data.put("zhiwu", zhiwu);
        data.put("quxiang", quxiang);
        data.put("shoucigongzuonianyue",shoucigongzuonianyue);
        data.put("gongling",gongling);
        data.put("leixing", leixing);
        for (Row row : sheet) {
            for (Cell cell : row) {
                String cellValue = cell.getStringCellValue();
                if (cellValue.startsWith("$")) {

                    String key = cellValue.substring(1);

                    if (data.containsKey(key)) {
                        cell.setCellValue(data.get(key));
                    }
                }
            }
        }


        FileOutputStream outputStream = new FileOutputStream(baocundizhi);
        workbook.write(outputStream);
        workbook.close();
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 代码检查工具之PMD入门使用详细教程

    Java 代码检查工具之PMD入门使用详细教程

    这篇文章主要介绍了Java 代码检查工具之PMD入门使用详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 最长公共子序列问题的深度分析与Java实现方式

    最长公共子序列问题的深度分析与Java实现方式

    本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,动态规划解法通过构建DP表,显著提高了计算效率,适用于大规模数据处理
    2025-02-02
  • SpringBoot+Spring Security基于内存用户认证的实现

    SpringBoot+Spring Security基于内存用户认证的实现

    本文介绍了SpringBoot+Spring Security基于内存用户认证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Spring是怎么扩展解析xml接口的

    Spring是怎么扩展解析xml接口的

    这篇文章主要介绍了Spring是怎么扩展解析xml接口的,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 并发编程模式之ThreadLocal源码和图文解读

    并发编程模式之ThreadLocal源码和图文解读

    这篇文章主要介绍了并发编程模式之ThreadLocal源码和图文解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详谈hibernate,jpa与spring data jpa三者之间的关系

    详谈hibernate,jpa与spring data jpa三者之间的关系

    这篇文章主要介绍了hibernate,jpa与spring data jpa三者之间的关系,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • win10系统64位jdk1.8的下载与安装教程图解

    win10系统64位jdk1.8的下载与安装教程图解

    这篇文章主要介绍了win10系统64位jdk1.8的下载与安装教程图解,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • IDEA右键新建时没有Java Class选项的解决过程

    IDEA右键新建时没有Java Class选项的解决过程

    今天遇到在IntelliJ IDEA中无法新建JavaClass文件的问题,经过查询和实践,找到了两种解决办法,第一种是避免将包名设置为Java的关键字,例如将"abstract"改为"abstract_";第二种是通过Project Structure设置Sources目录,将包含Java类的目录标记为Sources
    2025-11-11
  • Java浅析代码块与构造块及静态块三者之间的关系

    Java浅析代码块与构造块及静态块三者之间的关系

    所谓代码块是指用"{}"括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块、和同步代码块。如果在代码块前加上synchronized关键字,则此代码块就成为同步代码块
    2022-07-07
  • SpringCloud之服务注册与发现Spring Cloud Eureka实例代码

    SpringCloud之服务注册与发现Spring Cloud Eureka实例代码

    这篇文章主要介绍了SpringCloud之服务注册与发现Spring Cloud Eureka实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论