惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cisco Blogs
Schneier on Security
Schneier on Security
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tenable Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
Security Latest
Security Latest
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Scott Helme
Scott Helme
Webroot Blog
Webroot Blog
Project Zero
Project Zero
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
Spread Privacy
Spread Privacy
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News | PayPal Newsroom
Help Net Security
Help Net Security
The Hacker News
The Hacker News
H
Heimdal Security Blog
O
OpenAI News
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
Cyberwarzone
Cyberwarzone
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 叶小钗
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Security Affairs
P
Proofpoint News Feed
S
Secure Thoughts
腾讯CDC
Google DeepMind News
Google DeepMind News
量子位
罗磊的独立博客

博客园 - 爱跳舞的程序员

freemarker对数字格式的处理 FilePathJaxbUtil(xml文件转JavaBean对象工具) freemarker对日期的处理 PL_SQL常用快捷键 将博客搬至CSDN css+jquery右下角弹框提示框(工作需要就开发调式了) textarea文本居中的问题 bat批量复制文件(一键打包更新代码,避免手动一个个复制) url特殊字符传递参数解决方法(特指超链接) js 拼接字符串带变量(js方法参数单双引号拼接的问题记录) 表单提交由submit改为异步的方式 解决复制select下拉框时 值没法复制的问题 Jquery操作select汇总 博文阅读密码验证 - 博客园 ztree树添加右击菜单 ligerLayout布局(左右分栏) 模糊查询+首字母查询组合框 displayTag解决中文排序、和翻页查询出错的问题 jquery之ztree树入门(输出最简单树形)
java 根据word xml模板生成word(个人v2版本)
爱跳舞的程序员 · 2023-03-14 · via 博客园 - 爱跳舞的程序员

这里用的是poi相关jar包以及freemarker插值技术实现,poi相关jar包这里不再述说

1,编辑word并保存为xml

其中需要动态输出的内容使用${xxx}代替,xxx是你的java类属性值,如:年龄:${age}
打开的xml要看看是否为途中${}的样式,如果被wold分割了,需要自己了解wold xml格式并去修改

2,把xml后缀改为ftl文件

    $(function() {
         //导出
           $("#exportWordData").click(function() {  
               var id = $("input[name='id']").val();
             //  alert(id);
               var url = __ctx+'/yjsqsgyrb/yjsqsgyrb/yjsqsgyrb/exportWordxml.ht?id='+id;
               var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
               if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1) {//判断是否IE浏览器
                   window.location.href(url);
               }else{
                   window.open(url,"xxx调度日报_");
               }
           });
    });

js

@RequestMapping("exportWordxml")
    public void exportWordxml(HttpServletRequest request, HttpServletResponse response) throws Exception {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Map<String, Object> rootMap = new HashMap<String, Object>();
        String id = RequestUtil.getString(request, "id");

        Yjsqsgyrb yjbb = new Yjsqsgyrb();
        yjbb = (Yjsqsgyrb) yjsqsgyrbService.getById(Long.valueOf(Long.parseLong(id)));
        
        Gson gson = new Gson();
        String json = gson.toJson(yjbb);
        rootMap = gson.fromJson(json, rootMap.getClass());

        String name = "xxx日报_" + df.format(new Date()) + ".doc";
        // 设置MIMI类型,默认的是text/hmtl
        response.setHeader("Content-Type", "application/msword");
        // 解决中文乱码,以及设置生成的文档名
        response.setHeader("Content-Disposition", "attachment;filename=" + new String(name.getBytes("utf-8"), "ISO8859-1"));

        // 取得当前类所在的目录
        String filePath = FileUtil.getRootPath() + File.separator + "commons" + File.separator + "template" + File.separator + "yjdlbb" + File.separator;

        Configuration cfg = new Configuration();
        cfg.setDirectoryForTemplateLoading(new File(filePath));

        // 这里不设置编码的话,即是成功了有时也打不开文件,因为乱码
        Template temp = cfg.getTemplate("myxml.ftl", "utf-8");
        PrintWriter pw = response.getWriter();

        /* 合并数据模型和模版 */
        temp.process(rootMap, pw);
        pw.flush();
        pw.close();
    }

java

其中导入的类

import com.google.gson.Gson;
import freemarker.template.Configuration;
import freemarker.template.Template;

若需要修改其中的值,可以直接修改map中的json即可,比如同比需要判断数字大于零在前面添加增长,小于零则在前面添加减少

        Map<String, Object> rootMap = new HashMap<String, Object>();
        String id = RequestUtil.getString(request, "id");

        Yjsqsgyrb yjbb = new Yjsqsgyrb();
        yjbb = (Yjsqsgyrb) yjsqsgyrbService.getById(Long.valueOf(Long.parseLong(id)));
        
        Gson gson = new Gson();
        String json = gson.toJson(yjbb);
        rootMap = gson.fromJson(json, rootMap.getClass());
        Object object = rootMap.get("qstdzgfhhb");
        if (object!=null) {
            Double double1 = (Double) object;
            if (double1!=null&&double1>0) {
                rootMap.put("qstdzgfhhb", "增加"+double1);
            }else if (double1!=null&&double1<0) {
                rootMap.put("qstdzgfhhb", "减少"+Math.abs(double1));
            }
//            System.out.println("-----------"+double1);
        }

修改字段的替换值

/**
     * @param rootMap 
     * void   调用 rootMap =yjsqsgyrbService.handleVar(rootMap);
     * 
     */
    public Map<String, Object>  handleVar(Map<String, Object> rootMap) {
        java.util.List<String> vars = new java.util.ArrayList<String>();
        vars.add("qstdzgfhhb");
        vars.add("hbsrzj");
        vars.add("rydlhb");
        vars.add("yljydltb");
        vars.add("nljydltb");

        for (String key : vars) {
            Object object = rootMap.get(key);
            if (object != null) {
                Double double1 = (Double) object;
                if (double1 != null && double1 > 0) {
                    rootMap.put(key, "增加" + double1);
                } else if (double1 != null && double1 < 0) {
                    rootMap.put(key, "减少" + Math.abs(double1));
                }
            }

        }
        return rootMap;
    }

修改字段的替换值V2版(抽取成方法)