java快速导出word文档

news2025/2/24 3:35:57
   点关注不迷路,欢迎再访!	

精简博客内容,尽量已行业术语来分享。
努力做到对每一位认可自己的读者负责。
帮助别人的同时更是丰富自己的良机。

文章目录

    • 前言
    • 一.添加 Apache POI 依赖
    • 二.填充文档内容
    • 三.导出文档效果测试

前言

在 Java 应用程序中,有时候我们需要将数据导出为 Word 文档,以便进行文档的编辑、打印或共享。本文将介绍如何使用 Java 实现导出 Word 文档的方法,帮助你灵活处理文档导出需求。

一.添加 Apache POI 依赖

    <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
         <version>3.16</version>
    </dependency>
    <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>ooxml-schemas</artifactId>
         <version>1.3</version>
    </dependency>

二.填充文档内容

在导出 Word 文档之前,需要创建一个空的 Word 文档对象

//创建文档对象
XWPFDocument doc = new XWPFDocument();
//页边距
DocxUtil.setDocumentMargin(doc, "1082", "1440", "1082", "1440");

使用 Apache POI 提供的 API,可以向文档中添加段落标题

// 创建段落
XWPFParagraph p = doc.createParagraph();
DocxUtil.setTextFontInfo(p, false, false, text, "宋体", "000000", "24", false, null, false, false, null, 0, null);
DocxUtil.setParagraphSpacingInfo(p, true, "0", "0", "100", "100", true, "240", STLineSpacingRule.AUTO);
DocxUtil.setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER);

向文档中创建表格

XWPFParagraph paragraph = doc.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
XWPFTable table = paragraph.getDocument().createTable(3,3);//创建表格
table.setWidth(500);
table.setCellMargins(20, 20, 20, 20);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//表格宽度
CTTblWidth width = tablePr.addNewTblW();
width.setW(BigInteger.valueOf(4000));
//获取第一行
List<XWPFTableCell> tableCells = table.getRow(0).getTableCells();
tableCells.get(0).setText("单元格值");

三.导出文档效果测试

public class ExamTest {
    public static void main(String[] args) throws IOException {
        XWPFDocument doc = new XWPFDocument();
       //页边距
        DocxUtil.setDocumentMargin(doc, "1082", "1440", "1082", "1440");
        addDocxParagraphTitle(doc,"标题");
        addDocxParagraph(doc,"第一个段落内容");
        FileOutputStream outputStream = new FileOutputStream("D://document.docx");
        XWPFParagraph paragraph = doc.createParagraph();
        paragraph.setAlignment(ParagraphAlignment.CENTER);
        addDocxParagraph(doc,null);
        addDocxParagraph(doc,"有边框的表格");
        XWPFTable table = paragraph.getDocument().createTable(3,4);//创建表格
        table.setWidth(500);
        table.setCellMargins(20, 20, 20, 20);
        //表格属性
        CTTblPr tablePr = table.getCTTbl().addNewTblPr();
        //表格宽度
        CTTblWidth width = tablePr.addNewTblW();
        width.setW(BigInteger.valueOf(8000));
        //无边框
        //CTTblBorders tableBorders = table.getCTTbl().getTblPr().addNewTblBorders();
        //tableBorders.addNewBottom().setVal(STBorder.NIL);
        //tableBorders.addNewLeft().setVal(STBorder.NIL);
        //tableBorders.addNewRight().setVal(STBorder.NIL);
        //tableBorders.addNewTop().setVal(STBorder.NIL);
        //tableBorders.addNewInsideH().setVal(STBorder.NIL);
        //tableBorders.addNewInsideV().setVal(STBorder.NIL);
        for (int k = 0; k < 3; k++) {
            List<XWPFTableCell> tableCells = table.getRow(k).getTableCells();
            if(k == 0){
                tableCells.get(0).setText("序号");
            }else{
                tableCells.get(0).setText(String.valueOf(k));
            }
            for (int j = 0; j < 3; j++) {
                if(k == 0){
                    tableCells.get(j+1).setText(String.valueOf(j+1));
                }else{
                    tableCells.get(j+1).setText("");
                }
            }
        }

        doc.write(outputStream);
        outputStream.close();

    }

    private static void addDocxParagraphTitle(XWPFDocument doc, String title) {
        // 标题
        XWPFParagraph titleP = doc.createParagraph();
        DocxUtil.setTextFontInfo(titleP, false, false, title, "宋体", "000000", "44", true, null, false,
                false, null, 0, null);
        DocxUtil.setParagraphSpacingInfo(titleP, true, "0", "0", "0", "50", true, "240", STLineSpacingRule.AUTO);
        DocxUtil.setParagraphAlignInfo(titleP, ParagraphAlignment.CENTER, TextAlignment.CENTER);
    }

    private static void addDocxParagraph(XWPFDocument doc, String text) {
        XWPFParagraph p = doc.createParagraph();
        DocxUtil.setTextFontInfo(p, false, false, text, "宋体", "000000", "24", false, null, false, false, null, 0, null);
        DocxUtil.setParagraphSpacingInfo(p, true, "0", "0", "100", "100", true, "240", STLineSpacingRule.AUTO);
        DocxUtil.setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER);
    }
}

测试效果
在这里插入图片描述

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

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

相关文章

Apache CloudStack Official Document 翻译节选(一)

关于 Apache CloudStack 的 概念和专用术语 &#xff08;一&#xff09; 甲一 Apache CloudStack Apache CloudStack 是一个开源的IAAS平台&#xff0c;管理调度着用于构建公有云或私有云的计算、网络、存储资源池。 借助Apache CloudStack&#xff0c;你可以创建一个按需使用的…

解锁4款高效的视频转文字助手!

虽然视频已经成为我们获取和记录信息的重要方式&#xff0c;可是有时候我们仍需要将视频中的内容转换为文字&#xff0c;才能够有效地整理、分析和利用这些信息。所以就有了视频转文字工具&#xff0c;今天我就推荐&#xff14;款好用的转换工具给大家 1、福昕视频在线转换 直…

【Java数据结构】---List(Stack)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 前言栈Stack栈的模拟实现…

PyTorch 基础学习(5)- 神经网络

系列文章&#xff1a; PyTorch 基础学习&#xff08;1&#xff09; - 快速入门 PyTorch 基础学习&#xff08;2&#xff09;- 张量 Tensors PyTorch 基础学习&#xff08;3&#xff09; - 张量的数学操作 PyTorch 基础学习&#xff08;4&#xff09;- 张量的类型 PyTorch 基础学…

<数据集>路面坑洼识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;681张 标注数量(xml文件个数)&#xff1a;681 标注数量(txt文件个数)&#xff1a;681 标注类别数&#xff1a;1 标注类别名称&#xff1a;[pothole] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对类…

15.3 模型评估与调优

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示

目录 一. 前提小知识(数据库连接&#xff0c;数据库&#xff0c;SCHEMA&#xff0c;Table的关系) 二. 添加备注 2.1 添加备注基本语法(sys.sp_addextendedproperty) 2.2 SQL演示 2.3 fn_listextendedproperty函数查询备注个数 2.4 开发常用添加注释语法 三. 修改备注 3…

深入理解 PHP 高性能框架 Workerman 守护进程原理

大家好&#xff0c;我是码农先森。 守护进程顾名思义就是能够在后台一直运行的进程&#xff0c;不会霸占用户的会话终端&#xff0c;脱离了终端的控制。相信朋友们对这东西都不陌生了吧&#xff1f;如果连这个概念都还不能理解的话&#xff0c;建议回炉重造多看看 Linux 进程管…

C++:vector类(default关键字,迭代器失效)

目录 前言 成员变量结构 iterator定义 size capacity empty clear swap []运算符重载 push_back pop_back reserve resize 构造函数 默认构造函数 default 迭代器构造 拷贝构造函数 赋值重载函数 析构函数 insert erase 迭代器失效问题 insert失效 er…

Linux使用学习笔记3 系统运维监控基础

系统运维监控类命令 查询每个进程的线程数 for pid in $(ps -ef | grep -v grep|grep "systemd" |awk {print $2});do echo ${pid} > /tmp/a.txt;cat /proc/${pid}/status|grep Threads > /tmp/b.txt;paste /tmp/a.txt /tmp/b.txt;done|sort -k3 -rn for pid…

mfc100u.dll丢失问题分析,详细讲解mfc100u.dll丢失解决方法

面对mfc100u.dll文件丢失带来的挑战时&#xff0c;许多用户都可能感到有些无助&#xff0c;尤其是当这一问题影响到他们日常使用的软件时。但实际上&#xff0c;存在几种有效方法可以帮助您快速恢复该关键的系统文件。为了方便不同水平的用户&#xff0c;本文将详细解析各种处理…

自动化测试工具Selenium IDE

简介 Selenium IDE 是实现Web自动化的一种便捷工具&#xff0c;本质上它是一种浏览器插件。该插件支持Chrome和Firefox浏览器&#xff0c;拥有录制、编写及回放操作等功能&#xff0c;能够快速实现Web的自动化测试。 使用场景 1、Selenium IDE本身的定位并不是用于复杂的自动…

Ps:首选项 - 技术预览

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“技术预览” Technology Previews选项卡允许用户启用或禁用一些实验性功能&#xff0c;以测试或使用 Adobe 提供的最新技术。 技术预览 Technology Previews 启用保留细节 2.0…

如何解决浏览器页面过曝,泛白等问题

问题描述&#xff0c;分别对应edge和chrome浏览器这是什么原因&#xff1f;

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件&#xff0c;发现使用固态硬盘改装的U盘以及手机等设备&#xff0c;无法被禁止&#xff0c;无奈下&#xff0c;自己使用C#手搓了一个。 基本逻辑&#xff1a; 开机自启&#xff1b;启动时&#xff0c;修改注册表&#xff0c;禁止系统插入USB存…

字符串函数!!!(续)(C语言)

一. strtok函数的使用 继续上次的学习&#xff0c;今天我们来认识一个新的函数strtok&#xff0c;它的原型是char* strtok(char* str,const char* sep)&#xff0c;sep参数指向了一个字符串&#xff0c;定义了用作分隔符的字符合集&#xff0c;第一个参数指定⼀个字符串&#…

DataStream API的Joining操作

目录 Window Join Tumbling Window Join Sliding Window Join Session Window Join Interval Join Window CoGroup Window Join 窗口连接&#xff08;window join&#xff09;将两个流的元素连接在一起&#xff0c;这两个流共享一个公共键&#xff0c;并且位于同一窗口。…

从老旧到智慧病房,全视通智慧病房方案减轻医护工作负担

传统的老旧病房面临着诸多挑战。例如&#xff0c;患者风险信息的管理仍依赖于手写记录和人工核查&#xff1b;病房呼叫系统仅支持基本的点对点呼叫&#xff0c;缺乏与其它系统的集成能力&#xff1b;信息传递主要依靠医护人员口头传达&#xff1b;护理信息管理分散且不连贯&…

JavaEE-多线程

前情提要&#xff1a;本文内容过多&#xff0c;建议搭配目录食用&#xff0c;想看哪里点哪里~ PC端目录 手机端目录 话不多说&#xff0c;我们正式开始~~ 目录 多线程的概念进程和线程的区别和联系:使用Java代码进行多线程编程Thread类中的方法和属性线程的核心操作1. 启动…

【mamba学习】(一)SSM原理与说明

mamba输入输出实现与transformer几乎完全一样的功能&#xff0c;但速度和内存占用具有很大优势。对比transformer&#xff0c;transformer存在记忆有限的情况&#xff0c;如果输入或者预测的序列过长可能导致爆炸&#xff08;非线性&#xff09;&#xff0c;而mamba不存在这种情…