Java导出word

原文地址

传入的值不能为null,否则会报错,IXDocReport 有自己的判null规则,比较麻烦,建议代码直接把null替换成""

   public void exportWord1(WeeklyMeetDataDto dto, HttpServletResponse response) {ServletOutputStream downLoadOutput = null;try {WeeklyMeetDataVo.TextData partOneData = getPartOneData(dto);String text = dto.getRqb().split("-")[1] + "月" + dto.getRqb().split("-")[2] + "日~" + dto.getRq().split("-")[1] + "月" + dto.getRq().split("-")[2] + "日," +"全国日均发电量" + partOneData.getQkjfsdl() + "亿千瓦时,同比" + partOneData.getQkjfsdltb() + ";" +"国网经营区日均调度用电量" + partOneData.getDdfsdl_new() + "亿千瓦时,同比" + partOneData.getDdfsdl_newtb() + ";";ClassPathResource classPathResource = new ClassPathResource("template/DDZB1.docx");InputStream ins = classPathResource.getInputStream();//注册xdocreport实例并加载FreeMarker模板引擎IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);//创建xdocreport上下文对象IContext context = report.createContext();//创建要替换的文本变量context.put("text", text);List<WeeklyMeetDataVo.EachRegion> eachRegion = getEachRegion(dto);List<WeeklyMeetDataVo.PullPower> pullPower = getPullPower(dto);List<WeeklyMeetDataVo.DirectPowerPlant> directPowerPlant = getDirectPowerPlant(dto);String lxdText = "";if (CollectionUtils.isEmpty(pullPower)) {lxdText = "所有电网均未发生拉路限电现象。";}context.put("lxdText", lxdText);context.put("ddydlqk", eachRegion);context.put("zdfhqk", eachRegion);context.put("lxd", pullPower);context.put("zd", directPowerPlant);//表格FieldsMetadata fieldsMetadata = report.createFieldsMetadata();fieldsMetadata.load("ddydlqk", WeeklyMeetDataVo.EachRegion.class, true);fieldsMetadata.load("zdfhqk", WeeklyMeetDataVo.EachRegion.class, true);fieldsMetadata.load("lxd", WeeklyMeetDataVo.PullPower.class, true);fieldsMetadata.load("zd", WeeklyMeetDataVo.DirectPowerPlant.class, true);//为null会报错Map<String, Object> contextMap = context.getContextMap();for (Map.Entry<String, Object> map : contextMap.entrySet()) {Class<?> aClass = map.getValue().getClass();String name = aClass.getName();if ("java.util.ArrayList".equals(name)) {Object value = map.getValue();List list = (List) value;for (Object object : list) {Class<?> aClass2 = object.getClass();Field[] declaredFields = aClass2.getDeclaredFields();for (Field field1 : declaredFields) {field1.setAccessible(true);Object o = field1.get(object);if (o == null) {field1.set(object, "");}}}} else if (ObjectUtils.isEmpty(map.getValue())) {contextMap.put(map.getKey(), "");}}//替换图片fieldsMetadata.addFieldAsImage("img");byte[] byteImage = ImageUtils.base64ToFile(dto.getImageBase64Code1());ByteArrayInputStream inputStream = new ByteArrayInputStream(byteImage);context.put("img", inputStream);response.setContentType("application/msword");response.setCharacterEncoding("utf-8");response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("调度周报.docx", "utf-8"));response.setHeader("Content-Type", "application/octet-stream;charset=utf-8");downLoadOutput = response.getOutputStream();report.process(context, downLoadOutput);} catch (Exception e) {e.printStackTrace();} finally {try {if (downLoadOutput != null) {downLoadOutput.flush();downLoadOutput.close();downLoadOutput = null;}} catch (IOException e1) {e1.printStackTrace();System.out.println("Close ServletOutputStream error. type 55");}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ignis - Interactive Fire System

Ignis - 点火、蔓延、熄灭、定制! 全方位火焰系统。 这个插件在21年的项目中使用过很好用值使用概述 想玩火吗?如果想的话,那么Ignis就是你的最佳工具。有了Ignis,你可以把任何物体、植被或带皮带骨的网状物转换为可燃物体,它就会自动着火。然后,火焰可以蔓延,点燃其他物…

Java 一对多

前言 Internet 协议集支持一个无连接的传输协议&#xff0c;该协议称为用户数据报协议&#xff08;UDP&#xff0c;User Datagram Protocol&#xff09;。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。 此代码就是基于UDP协议编写。 通常把一对多的…

【docker 】centOS 安装docker

官网 docker官网 github源码 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装软件包 yum install -y yum-utils \device-mapper-persistent-data…

【优选算法系列】【专题二滑动窗口】第四节.30. 串联所有单词的子串和76. 最小覆盖子串

文章目录 前言一、串联所有单词的子串 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、最小覆盖子串 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

【Docker】进阶之路:(四)操作容器

【Docker】进阶之路&#xff1a;&#xff08;四&#xff09;Docker容器 容器的生命周期创建容器docker createdocker run 管理容器查看运行的容器&#xff1a;查看所有容器&#xff1a; 启动与终止启动容器终止容器 进入容器docker attachdocker exec 导出和导入导出导入 容器的…

浅谈5G基站节能及数字化管理解决方案的设计与应用-安科瑞 蒋静

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…

actitivi自定义属性(二)

声明&#xff1a;此处activiti版本为6.0 此文章介绍后端自定义属性解析&#xff0c;前端添加自定义属性方法连接&#xff1a;activiti自定义属性&#xff08;一&#xff09;_ruoyi activiti自定义标题-CSDN博客 1、涉及到的类如下&#xff1a; 简介&#xff1a;DefaultXmlPar…

在 JavaScript 中导入和导出 Excel XLSX 文件:SpreadJS

在 JavaScript 中导入和导出 Excel XLSX 文件 2023 年 12 月 5 日 使用 MESCIUS 的 SpreadJS 将完整的 JavaScript 电子表格添加到您的企业应用程序中。 SpreadJS 是一个完整的企业 JavaScript 电子表格解决方案&#xff0c;用于创建财务报告和仪表板、预算和预测模型、科学、工…

【华为OD】给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串

给定一个只包括 (,),{,},[,] 的字符串 s , 判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1 : 输入:s="()" 输出 : true 示例 2 :

图的搜索(一):广度优先搜索算法和深度优先搜索算法

图的搜索&#xff08;一&#xff09;&#xff1a;广度优先搜索算法和深度优先搜索算法 本章主要记录了图的搜索算法&#xff0c;和可以解决图的基本问题——最短路径问题的算法。本章主要对图搜索的相关算法进行了介绍&#xff1a;广度优先搜索算法、深度优先搜索算法。 下一…

公网域名如何解析到内网IP服务器——快解析域名映射外网访问

在本地搭建主机应用后&#xff0c;由于没有公网IP或没有公网路由权限&#xff0c;在需要发布互联网时&#xff0c;就需要用到外网访问内网的一些方案。由于内网IP在外网不能直接访问&#xff0c;通常就用通过外网域名来访问内网的方法。那么&#xff0c;公网域名如何解析到内网…

Tmux中使用Docker报错 - 解决方案

问题 进入Tmux会话后&#xff0c;在其中使用Docker可能会出现如下报错&#xff1a; Got permission denied while trying to connect to the Docker ……解决方案 退出tmux会话: tmux detach在tmux会话外部杀掉tmux进程&#xff1a; pkill -f tmux重新进入tmux&#xff1a…

权威认证!景联文科技入选杭州市2023年第二批省级“专精特新”中小企业认定名单

为深入贯彻党中央国务院和省委省政府培育专精特新的决策部署&#xff0c;10月7日&#xff0c;杭州市经济和信息化委员会公示了2023年杭州“专精特新”企业名单&#xff08;第二批&#xff09;。 根据工业和信息化部《优质中小企业梯度培育管理暂行办法》&#xff08;工信部企业…

【Vue3+Ts项目】硅谷甄选 — 路由配置+登录模块+layout组件+路由鉴权

一、路由配置 项目一共需要4个一级路由&#xff1a;登录&#xff08;login&#xff09;、主页&#xff08;home&#xff09;、404、任意路由&#xff08;重定向到404&#xff09;。 1.1 安装路由插件 pnpm install vue-router 1.2 创建路由组件 在src目录下新建views文件…

Graphpad Prism10.1.0 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件&#xff0c;它可以将科学图形、综合曲线拟合&#xff08;非线性回归&#xff09;、可理解的统计数据、数据组织结合在一起&#xff0c;除了最基本的数据统计分析外&#xff0c;还能自动生成统…

Python:核心知识点整理大全8-笔记

目录 ​编辑 4.5 元组 4.5.1 定义元组 dimensions.py 4.5.2 遍历元组中的所有值 4.5.3 修改元组变量 4.6 设置代码格式 4.6.1 格式设置指南 4.6.2 缩进 4.6.3 行长 4.6.4 空行 4.6.5 其他格式设置指南 4.7 小结 第5章 if语句 5.1 一个简单示例 cars.py 5.2 条…

现代皮质沙发模型材质编辑

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

线性容器(QByteArray、QString、QList模板类)、堆栈窗体

QT 线性容器 点击查看&#xff1a;字符和字节的区别&#xff0c;ASCII、Unicode 和 UTF-8 编码的区别。&#xff08;&#x1f448; 安全链接&#xff0c;放心跳转&#xff09; QByteArray 思考&#xff1a;char buf[6] “hello”; 如果 C 语言中要利用 buf 内容重新生成 “…

学生备考使用台灯到底好不好?公认好用的护眼台灯推荐

在现代生活中&#xff0c;许多学生的学习压力越来越大&#xff0c;面临的近视几率也越来越大&#xff0c;特别是初中生&#xff0c;眼睛发育还未完全&#xff0c;使用不恰当的灯光也会对眼睛造成损害&#xff0c;特别是护眼台灯。虽然护眼台灯在功能上能够提供充足、柔和的光线…

harbor仓库镜像迁移脚本

import subprocess import json import logging# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 替换这里的Harbor仓库地址和凭据 harbor_url "https://harbor.test.com" harbor_name "harbor.test.co…