JAVA生成Word文档

第一步:导入依赖

<!--生成word文档-->
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.3</version>
</dependency>
<!--数字转为汉字大写-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId>
</dependency>

第二步:业务代码 

  @Overridepublic void downloadEngineeringWord(HttpServletResponse response, Long engineeringId) {String engineeringWordSql = "你的查询sql";Map<String, Object> tendersWord = (Map<String, Object>) SqlUtil.getMapToList(engineeringWordSql, entityManager).get(0);if (ObjectUtils.isEmpty(tendersWord)) {return;}//判断文本是否出现if (tendersWord.containsKey("margin") && !ObjectUtils.isEmpty(tendersWord.get("margin"))) {BigDecimal price = (BigDecimal) tendersWord.get("margin");tendersWord.put("marginShow", price.signum() > 0);} else {tendersWord.put("marginShow", false);}//将数字金额转为汉字大写if (tendersWord.containsKey("maxPrice") && !ObjectUtils.isEmpty(tendersWord.get("maxPrice"))) {double money = Double.parseDouble(tendersWord.get("maxPrice").toString());String chineseMoney = NumberChineseFormatter.format(money, true, true);tendersWord.put("highestPrice", chineseMoney);}//对前端使用\n换行的段落文本进行格式化换行Object qualifications = tendersWord.get("qualifications");if (!ObjectUtils.isEmpty(qualifications) && qualifications.toString().contains("/")) {List<String> qualificationsList = Arrays.asList(qualifications.toString().split("/"));List<Map<String, Object>> qualificationMapList = new ArrayList<>();qualificationsList.stream().filter(f -> !ObjectUtils.isEmpty(f.trim())).forEach(qualification -> {Map<String, Object> itemMap = new HashMap<>();itemMap.put("qualification", qualification);qualificationMapList.add(itemMap);});tendersWord.put("qualifications", qualificationMapList);}String fileName = "工程文件";try {File wordTemplate = new File("start/src/main/resources/" + fileName + ".docx");XWPFTemplate template = XWPFTemplate.compile(wordTemplate.getAbsolutePath()).render(tendersWord);response.setCharacterEncoding("UTF-8");response.setContentType("multipart/form-data");response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".docx", "utf-8"));response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");OutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);template.write(bos);bos.flush();out.flush();PoitlIOUtils.closeQuietlyMulti(template, bos, out);} catch (IOException e) {throw new BizException(fileName + ".docx 生成失败,请稍后再试!");}}

官网链接:Poi-tl Documentation 

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

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

相关文章

《代码之丑》学习笔记18——写代码是一件可以一生精进的事

结束语 | 写代码是一件可以一生精进的事 文章目录 结束语 | 写代码是一件可以一生精进的事代码的敏感度 在很多人心目中&#xff0c;程序员是一个辛苦的职业&#xff0c;一方面&#xff0c;各种新东西层出不穷&#xff0c;程序员们要努力追随&#xff0c;另一方面&#xff0c;业…

十、VTK创建圆锥体vtkConeSource 带颜色

为圆锥体的每一面,添加一种颜色: 上述效果的代码: #include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkLine.h> #include <vtkPolyData.h> #include <vtkPolyDataWriter.h> #include <vtkPolyDataMapper.h> #incl…

机器学习复习(6)——numpy的数学操作

加减法运算 # 创建两个不同的数组 a np.arange(4) #list(0,1,2,3 b np.array([5,10,15,20]) # 两个数组做减法运算 b-a 运行结果&#xff1a; 计算数组的平方 #b*2代表数组b每个元素乘以2 #b**2代表数组b每个元素的2次方 b**2 运行结果&#xff1a; 计算数组的正弦值 #…

Java 数据结构 二叉树(二)红黑树

目录 数据结构图-树 简介 规则 旋转 重新着色 红黑树构建过程 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#xf…

UnityShader(十五)纹理的属性

目录 面板属性&#xff1a; 多级渐远纹理技术&#xff08;mipmapping&#xff09; Filter Mode&#xff08;滤波模式&#xff09; 面板属性&#xff1a; 在Unity中导入一些纹理资源后可以在它的材质面板上调整其属性 如图&#xff1a; 在这个面板上有许多可以调整的属性&am…

Python的作用域

Python中的作用域是用来确定变量和函数的作用范围和生命周期的规则。在Python中&#xff0c;有四种类型的作用域&#xff1a;局部作用域、外层作用域、全局作用域和内置作用域。 一&#xff1a;局部作用域 在函数内部定义的所有变量都属于局部作用域。这些变量只能在该函数内…

西瓜书学习笔记——核化线性降维(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 核化线性降维是一种使用核方法&#xff08;Kernel Methods&#xff09;来进行降维的技术。在传统的线性降维方法中&#xff0c;例如主成分分析&#xff08;PCA&#xff09;和线性判别分析&#xff08;LDA&#xff09;&#xff0c;数据被映…

C++学习Day03之构造函数的调用规则

目录 一、程序及输出1.1 编译器会给一个类 至少添加3个函数1.2 自己提供了 有参构造函数1.3 自己提供了 拷贝构造函数 二、分析与总结 一、程序及输出 1.1 编译器会给一个类 至少添加3个函数 编译器会给一个类 至少添加3个函数 默认构造&#xff08;空实现&#xff09; 析构函…

QCoro: Qt C++ 20 协程库介绍

C20 推出了协程的实现&#xff08;coroutines&#xff09;。虽然开发一个支持协程特性的类库还是要花很多功夫的&#xff0c;但是使用一个开发好的类库则是非常嗨。这也是C 委员会一贯的原则&#xff1a; 如果你是类库开发者&#xff0c;必须足够有耐心学习拗口的特性。但如果…

MySQL分区的优缺点

前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段&#xff0c;通过将数据划分成更小的可管理单元&#xff0c;我们能够提高查询性能、简化数据维护并更灵活地管理存储空间。然而&#xff0c;在采用分区时&#xff0c;我们必须认真考虑分区键的选择和实施细节&…

vue封装滚动表格

1.组件的使用 <div style"height:93%; overflow: hidden;"> <autoScroll :data"shortageList" :speed"0.5" :waitTime"500" :singleHeight"100" v-if"shortageList.length>0"><el-row v-for…

ACM训练题:曲线

这题只需要注意一个点&#xff0c;就是所有二次函数的二次系数都是大于0的&#xff0c;这说明这是个下凸函数&#xff0c;而且最小值旁边都是单调的&#xff0c;对于求区间凸函数极值问题&#xff0c;套三分模板即可。 AC代码&#xff1a; #include<bits/stdc.h> usin…

2023年全球软件开发大会(QCon上海站2023):核心内容与学习收获(附大会核心PPT下载)

在信息化和全球化日益加速的今天&#xff0c;软件开发技术日新月异&#xff0c;对全球各行各业产生了深远影响。2023年全球软件开发大会&#xff08;QCon上海站2023&#xff09;无疑成为行业内外瞩目的焦点。本次大会汇集了全球顶级的软件开发专家、企业领袖、研究者&#xff0…

nextcloud 优化扩展

cd /config vi config.php #ONLYOFFICE allow_local_remote_servers > true, #应用商店加速 appstoreenabled > true, appstoreurl > https://www.orcy.net/ncapps/v2/, #nginx配置调优 add_header Strict-Transport-Security max-age15552000; add…

cesium-加载谷歌影像

cesium在开发的时候有可能会加载不同的影像&#xff0c;今天就先看一下加载谷歌的吧。 使用谷歌有个好处就是基本不会出现此区域无卫星图的情况 闲言话语不多说&#xff0c;看代码 <template><div id"cesiumContainer" style"height: 100vh;"&g…

在nodejs中使用mysql2

目录 安装 mysql2:导入 mysql2 模块:创建数据库连接:执行查询操作:关闭数据库连接: 在之前的项目中nodejs模板使用的mysql包&#xff0c;mysql数据库版本是5.7&#xff0c;最近更新了数据库版本为mysql8&#xff0c;发现之前的代码无法成功连接数据库&#xff0c;经过排查发现问…

力扣题目训练(7)

2024年1月31日力扣题目训练 2024年1月31日力扣题目训练387. 字符串中的第一个唯一字符389. 找不同401. 二进制手表109. 有序链表转换二叉搜索树114. 二叉树展开为链表52. N 皇后 II 2024年1月31日力扣题目训练 2024年1月31日第七天编程训练&#xff0c;今天主要是进行一些题训…

springboot jar包编写启动start.sh

对于Spring Boot应用&#xff0c;由于其内置了用于启动的主类&#xff08;默认为org.springframework.boot.loader.JarLauncher或你自定义的SpringBootApplication注解的类&#xff09;&#xff0c;因此start.sh脚本可以相对简化。以下是一个针对Spring Boot应用的start.sh脚本…

springcloud-gateway升级版本allowedOrigins要改allowedOriginPatterns

前言 报错: java.lang.IllegalArgumentException: When allowCredentials is true,allowedOrigins cannot contain the special value "*"since that cannot be set on the "Access-Control-Allow-Origin"response header. To allow credentials to a se…

C语言第十八弹---指针(二)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、const修饰指针 1.1、const修饰变量 1.2、const修饰指针变量 2、指针运算 2.1、指针- 整数 2.2、指针-指针 2.3、指针的关系运算 3、野指针 3.1、…