• Spring Boot + FreeMarker制作word模板导出Word表格


    freemarker

    • FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
    • FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据
    <!--添加freeMarker-->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.20</version>
            </dependency>


    下一步我们要做的是先好我们的word模板然后将模板转换为xml文件。在word模板中需要定义好我们的占位符哦,使用${string}的方式。“string”根据自己的爱好定义就好了。

    过程如下:

    word文档:

    然后将我们的word文档另存为xml文档。

    将我们的xml文档的后缀改为ftl,然后用可以打开ftl文件的软件打开我们的ftl文件。在这里我们有几个需要注意的地方。

    第一,定义的占位符可能会被分开了。就像下面这样:

    我们需要做的就是删掉多余的部分,图中我定义的是${userName}.所以我就把多余的删掉,变成${userName}就可以了。

    第二,我们需要注意的就是在我们的表格部分需要自己添加freeMarker标签。在表格代码间用自定的标签括起来。定义的参数要和我们在方法中定义的一致,否则无法取到值。

    表格开始:

     结束:</list>

    package czc.sup.system.model.six;
    
    
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    import java.io.*;
    import java.util.Map;
    
    public class WordUtil {
    
        /**
         * 生成word文件
         * @param dataMap word中需要展示的动态数据,用map集合来保存
         * @param templateName word模板名称,例如:test.ftl
         * @param filePath 文件生成的目标路径,例如:D:/wordFile/
         * @param fileName 生成的文件名称,例如:test.doc
         */
        @SuppressWarnings("unchecked")
        public static void createWord(Map dataMap,String templateName,String filePath,String fileName){
            try {
                //创建配置实例
                Configuration configuration = new Configuration();
    
                //设置编码
                configuration.setDefaultEncoding("UTF-8");
    
                //ftl模板文件
                configuration.setClassForTemplateLoading(WordUtil.class,"/");
    
                //获取模板
                Template template = configuration.getTemplate(templateName);
    
                //输出文件
                File outFile = new File(filePath+File.separator+fileName);
    
                //如果输出目标文件夹不存在,则创建
                if (!outFile.getParentFile().exists()){
                    outFile.getParentFile().mkdirs();
                }
    
                //将模板和数据模型合并生成文件
                Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
    
    
                //生成文件
                template.process(dataMap, out);
    
                //关闭流
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
        
        public static void main(String[] args) {
             /** 用于组装word页面需要的数据 */
            Map<String, Object> dataMap = new HashMap<String, Object>();
            DataWord dataWord = new DataWord("model", "name", "designCode", "code", "met", "date", "temp", "humi", "hly");
            List<Object> datas = new ArrayList<>();
            for(int i=0;i<10;i++){
                Data data = new Data("1","检测名"+i, "norm", "result", "remark");
                datas.add(data);
            }
            dataMap.put("product",dataWord);
            dataMap.put("datas",datas);
            String filePath = "";
            if (IsWhatSystem.whatSystem()) {
                //文件路径
                filePath = "D:/doc_f/";
            }else {
                filePath = "/doc_f/";
            }
            //文件唯一名称
            String fileOnlyName = "生成Word文档.doc";
            /** 生成word  数据包装,模板名,文件生成路径,生成的文件名*/
            WordUtil.createWord(dataMap, "quality.ftl", filePath, fileOnlyName);
        }
        

    然后就在相应的目录下导出word文档了

  • 相关阅读:
    《ML in Action》笔记(2) —— ID3决策树
    《ML in Action》笔记(1) —— kNN分类器
    MYSQL笔记
    Javascript代码摘录
    初试mysql存储过程&触发器
    百度地图API应用实践(一) —— 栅格图(草稿)
    2020年8月9日, 网吧, 歌单, 极客时间, 龙岩网络图书馆, 正则, WPS, Python
    2020年8月3日, 网吧 ,
    2020年7月13日,想在网吧搞学习,实属想多了
    账号被盗,什么原因呢?是我的操作系统太脆弱,还是博客园存在安全隐患?
  • 原文地址:https://www.cnblogs.com/h-java/p/10026850.html
走看看 - 开发者的网上家园