java-数据导出到word文件

Java实现网页表格到Word文档的导出 Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的设计理念而闻名。由于其跨平台特性、稳定性和安全性,Java在企业级应用、移动开发、大数据和云服务等领域有着深远的影响力。它被全球成千上万的开发者使用,并且是许多大型系统的首选语言。Apache POI库是处理Microsoft Office文档的一个开源Java库,它允许开发者直接操作Excel和Word文档,包括读取、创建、修改等。 阅读详情

参考网址:(10条消息) Java导出Word文档的实现_plxddyxnmd的博客-优快云博客_java导出word

模板:

导出后:

处理模板:

  1. Word模板中选中要替换的文本,使用 Ctrl + F9 组合键将其设置为域,此时文本会被"{}"包围,接着鼠标右键选择【编辑域(E)...】
  2. 在弹出的对话框中,类别选择“邮件合并”,域名选择 "MergeField",域属性中的域名填入模版表达式${sendUserName}

pom文件:


        <!--导出word -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.6.0</version>
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.core</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.document</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.template</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>



        <!--指定excel,word文件不编码-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <nonFilteredFileExtensions>
                        <!-- 需要过滤掉不需要编码的文件:过滤后缀为.xlsx或者.xls的所有文件,不对其进行统一编码-->
                        <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xls</nonFilteredFileExtension>
                        <nonFilteredFileExtension>docx</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>

 实现层:

public ResultDto approveWordTest(HttpServletResponse response, ReimbursementFormDTO formDTO) {
        Map<String, Object> paramsMap = (Map<String, Object>) formDTO.getParamsMap();

        Map<String, Object> baseInfo = (Map<String, Object>) paramsMap.get("baseInfo");
        List<Map<String, Object>> formList = (List<Map<String, Object>>) paramsMap.get("form");

        ResultDto resultDto = new ResultDto();

        try {
            InputStream ins = this.getClass().getClassLoader().getResourceAsStream("templates/wordTest.docx");
            //注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, TemplateEngineKind.Freemarker);
            //创建xdocreport上下文对象
            IContext context = report.createContext();


            context.put("sendUserName", "张三");
            context.put("commission", "否");
            context.put("date", "2021/11/24");
            context.put("payUserName", "李四");
            context.put("bankName", "工商银行");
            context.put("account", "123456789");


            List<WordTest> formTest = new ArrayList<>();
            WordTest word1 = new WordTest();
            word1.setCost1(999.0);
            word1.setCost2(888.0);
            word1.setCost3(777.0);
            word1.setRemark("说明一下");

            WordTest word2 = new WordTest();
            word2.setCost1(666.0);
            word2.setCost2(555.0);
            word2.setCost3(444.0);
            word2.setRemark("说明两下");

            formTest.add(word1);
            formTest.add(word2);

            context.put("form", formTest);

            //创建字段元数据
            FieldsMetadata fm = report.createFieldsMetadata();
            //Word模板中的表格数据对应的集合类型
            fm.load("form", WordTest.class, true);

            //浏览器端下载
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/msword");
            String fileName = "wordTest.docx";
            response.setHeader("Content-Disposition", "attachment;filename="
                    .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
            report.process(context, response.getOutputStream());

            resultDto.setCode("200");
            resultDto.setMessage("导出成功");
        } catch (Exception e) {
            resultDto.setCode("400");
            resultDto.setMessage("导出失败");
            e.printStackTrace();
        }

        return resultDto;
    }

解决com.kingbase8.util.KSQLException: This _connection has been closed. 一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend. java.net.SocketTimeoutException: Read timed out. 阅读详情

相关推荐

QCC5125/QCC5144----LDAC 44.1K 48K 96K 192K 输出

QCC5125/QCC5144----LDAC 44.1K 48K 96K 192K 输出。而且还不需要license限制。

Alex_886的博客 1975

Java导出word文档

Java导出word文档

qq_43604221的博客 1万+

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3174

Java导出Word文档的几种方法

在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等。导出Word方式多种多样,通常有以下几种方式:使用第三方Java工具类库Hutool的Word工具类,参考网址为https://www.hutool.cn/docs/#/poi/Word生成-Word07Writer;利用Apache POI和FreeMarker模板引擎;第三方报表工具。

qq_43842093的博客 2万+

记一次使用STM32F042K6芯片内部HSI48M时钟导致CAN总线报错问题

深入去解决某个问题时,也会加深你对其它部分的了解和思考,比如这里让我又重新了解和CAN的采样点和CAN报错机制。

ApexYuan 860

3DE重客户端安装

3DE重客户端安装

m0_48170265的博客 9429

[含完整代码]Java实现导出word文档【超详细】

[含完整代码]Java实现导出word文档【超详细】java实现导出word文档是项目中很常见的操作,但又是很棘手的操作,这篇文章,带大家从0到1超详细的完整的操作一遍java实现导出word文档。一定要认真看这篇文章,超详细。话不多说直接上代码。

wang20000102的博客 1万+

从开通VPS到搭建宝塔面板全教程

你在输入域名(此时我们可能没有类似aaa.com这样的域名,所以要输入VPS的IP地址)的时候,下面的根目录也会跟着变动,等输入完成后,你可以把根目录再改回成/www/wwwroot/dq。这时,在你的浏览器中,输入外网面板地址的URL,输入username和password,即可登陆宝塔面板。第一次登陆,需要绑定你的宝塔账号,你可以到宝塔的注册界面,用手机注册一个,然后绑定,首先看一下你的VPS操作系统是什么类型的(其实你在选择VPS的时候,就已经选定了,我选择的事Centos系统)。

kxltsuperr的专栏 3734

JAVA使用Apache POI动态导出Word文档

1、需要的环境2、创建模板3、书写java类4、测试。

qq_45087487的博客 1万+

RC正弦波振荡电路实验全解析:如何通过调节电容电阻改变输出频率

本文深入解析RC正弦波振荡电路,重点阐述如何通过调节电容和电阻来精确改变输出频率。文章从文氏桥振荡电路的核心原理出发,详细介绍了电容粗调频段与电阻微调频率的实操策略,并分析了元件误差、寄生参数等对实测频率的影响,为电路设计与调试提供了从理论到实践的完整指南。

yhn456789的博客 1114

【LIN总线测试】——LIN主节点物理层测试

LIN总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。本章节主要介绍LIN主节点物理层如何测试?

测试领域技术分享 5530

java根据模板导出数据到word文档中(表格,自定义标签等)

将鼠标的光标移到要输入数据的地方,点击“插入”,点击“文档部件”,点击“域”;选择“邮件合并”,在域代码的函数后加入自定义的字段名“${字段名}”。如果不用循环的话,直接字段名字节定义名称就可以了,如果需要循环,字段名设置为【${对象.属性}】若需要循环表格内的内容时,处理如下,“域”中“邮件合并”的域代码使用“${对象.属性}”格式,自此,一个简单的模板制作完成。

八月林城的博客 5984

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java blob 导出_JAVA 操作blob数据然后生成word文件

import java.io.*;import java.sql.*;public class Test {Connection con = null;Statement stmt = null;ResultSet rs = null;private ResultSet getResultSet() {try {Class.forName("oracle.jdbc.driver.OracleDri...

weixin_34207865的博客 1052

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java+导出mysql文件_Java 导出数据库表信息生成Word文档

一、前言最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~先来看看生成的word文档效果吧下面我们也来一起简单的实现吧二、Java 导出数据库表信息生成Word文档温馨小提示:下面只是简单的展示一些主要代码,详情可参考文末给出的案例demo源码基本环境spring-boot 2.1.8mybatis-plus 2.2.0mysql 数据库1...

weixin_29809927的博客 452

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java实现把数据库数据导出成word文件实现文件下载功能

一 html代码:(注必须用标签) class="btn btn-success"  target="_parent" style="margin-top: 5px;">下载报告      截图: 二  后台controller方法:    1、        /**        * 下载pc端提交的外访报告        *         * @param

Alice_qixin的博客 9701

java 导出 word 文件大

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java 导出 Word 文件的教程 在软件开发中,将数据导出为 Word 文件是一项非常实用的任务。本文将为你详细介绍如何使用 Java 导出 Word 文件,特别是利用 Apache ...

weixin_30635707的博客 189

java导出wps文件怎么打开,怎么把excel表格导入word-用java将数据导出到wps表格中,怎么实现...

如何把WPS表格转换成Excel1、首先,用WPS 打开需要操作的Excel文件。2、点下WPS 表格右下角的“分页预览”,查看需要PDF文档的表格的页面情况二页,3、(这一步可选)这一步将表格区域的数据调整一下,把第二页的数据移到第一页。4、点击一下左上角的“WPS 表格”。5、然后再点击一下“输出为PDF”。6、在输出 PDF 文件的窗口中,点击一下“浏览”,(选择转换后的PDF的存放位置;并...

weixin_42505397的博客 641

java根据word模板导出_java根据word模板导出word文件

1、word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量2、将word文档另存为xml文件、编辑如下图,找到填写的占位,修改为${bcrxm}格式3、将文件后缀名改为.ftl文件4、java处理过程 、 引入frameMark jar 包5、java代码一、将需要填充的数据封装到map中、与模板中的占位对应、为什么用map 我也不知道。二、创建configuration对象三...

weixin_42372573的博客 802

java 导出word 带格式_java 导出数据为word文档(保持模板格式)

导出数据到具体的word文档里面,word有一定的格式,需要保持不变这里使用freemarker来实现:①:设计好word文档格式,需要用数据填充的地方用便于识别的长字符串替换 如 aaaaaaaaaaaaaaaa②:将word文档另存为 2003 xml格式③:找到需要替换的地方, 如 将 aaaaaaaaaaaa 修改为 ${userName}如果是list展示,注意按照如下方式修改:XX...

weixin_42125192的博客 1663

Java根据word模板导出Word文件工具

Java根据word模板导出Word文件工具 去发现同类优质开源项目:https://gitcode.com/ 介绍 本仓库提供了一个Java工具,用于根据Word模板导出Word文件。该工具支持在模板中插入图片、表格,并能够实现分段输出,以满足特定需求。与网络上其他基于模板填充Word的方案不同,本工具在处理数据换行时采用分段方式,而不是简单的换行。 功能特色 支持根据Word模板进行数据填充...

gitblog_06724的博客 540

java response 输出word_java导出数据到word(一)

一、首先再work上定义好模板 二、把定义好的work转成xml 如果出现下图错误,请百度msxml5.0,下载并安装,功能就可以正常使用。 三、打开xml,把对应要编辑的数据改成freemarker标签 四、放入具体代码中(1)把文件名改为 ftl后缀,并放入对于工程目录下 (2)Java后台代码实现数据填充,并输出/****【导出doc文档】*条件:*备注:*例子:*日志:**@a...

weixin_36048031的博客 904

word导出图解,java使用freemarker生成word

注:需要返回流至前端的,只需要将流接收至HttpServletResponse即可,目前demo示例为导出到本电脑的临时目录中。注释:工具类有提供单个word文件导出,也提供多个文件压缩包导出。

qq_46038363的博客 434

java 导出数据为word文档

之前记录了一下工作中用到的工具类。有一个POIUtil是用来导出数据为xls文件和word文档的。说要写一个demo的。 工具类传送门:导出数据为word文档或者excle的工具类 下面是导出word文档的demo: 只是一个小demo仅供参考。 /** * 导出word文档测试 * @throws FileNotFoundException */ @Test public void exportWord() throws FileNotFoundException { Map&lt

ccyy 1281

freemarker word模板_如何使用java代码导出word

前言:导出word的需求其实在日常工作中用到的地方还不少,于是想写一篇文章好好记录一下,在导出之前,需要了解一下关于浏览器如何处理servlet的后台数据。具体可以了解一下http通信下载行为在servlet的实现。导出的工具类代码来源于网络,如有侵权可以联系我删除文章个人使用ftl作为word导出模板引擎,有很多模板引擎可以选,个人经过查阅资料发现ftl用的比较多,所以选择这一种码云地...

weixin_39585463的博客 702

Java-web利用模板文件实现导出自定义word文档

由于项目开发需要,产品给出word模板,需要导出该格式的word文件。 1.通过word模板文件生成我们需要的模板.ftl文件。 步骤:将word文件转换成Microsoft XML格式文件(打开word,文件另存为xml格式文件),用notepad++编辑器打开文件,修改文件里面的内容,具体数据用${参数}...

小屁孩大帅-保密的博客 663

java poi读取word中附件_数据导出生成word附件使用POI的XWPFTemplate对象

比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel。Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF;一、前端使用get请求和post请求都可以get请求:window.location.href= appPath+"/e...

weixin_42573757的博客 1507
上一篇: Java 获取文件路径
下一篇: Java-easy Excel监听器
UID_UUID
博客等级 码龄5年 352粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值