zoukankan      html  css  js  c++  java
  • 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文档了

  • 相关阅读:
    人工智能背后的故事
    idea 开发插件。
    安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration
    安卓工作室 android studio文件和代码模板,以及汉化出错问题
    安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label
    android studio的汉化 教程 及解析
    安卓工作室Android Studio 快捷键
    安卓工作室 android studio 的 汉化 美化 定制 Android studio's Chinesization beautification customization
    VR开发 VR development
    Lakeshore 中文开发界面,示例项目,飞机大战 等 Lakeshore Chinese development interface, sample project, aircraft war, etc
  • 原文地址:https://www.cnblogs.com/h-java/p/10026850.html
Copyright © 2011-2022 走看看