当前位置: 首页 > article >正文

java快速导出word文档

   点关注不迷路,欢迎再访!	

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

文章目录

    • 前言
    • 一.添加 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.kler.cn/a/512833.html

相关文章:

  • 【K8S系列】K8s 领域深度剖析:年度技术、工具与实战总结
  • 【面试题】JVM部分[2025/1/13 ~ 2025/1/19]
  • 【大模型】ChatGPT 高效处理图片技巧使用详解
  • CentOS 安装Redis
  • Javascript 将页面缓存存储到 IndexedDB
  • 强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!
  • 小结:OSPF协议的工作原理
  • Linux探秘坊-------3.开发工具详解(2)
  • Spring Event和MQ的区别和使用场景
  • Java JDK17 API 离线文档下载
  • 【深度学习项目】语义分割-DeepLab网络(DeepLabV3介绍、基于Pytorch实现DeepLabV3网络)
  • ubuntu下,模仿安装vllm,仅记录
  • android如何将字符串\u83b7\u53d6\u6210\u529f转换成中文
  • Mac安装配置使用nginx的一系列问题
  • 一文大白话讲清楚webpack基本使用——3——图像相关loader的配置和使用
  • 摘录人工智能面试笔试题汇总
  • 文档解析:PDF里的复杂表格、少线表格如何还原?
  • 对人型机器人的研究和展望
  • 提升前端性能的JavaScript技巧:让你的网站飞一般的流畅
  • 【C++指南】类和对象(九):内部类
  • 【JAVA】最新jdk23下载安装
  • Java Web开发高级——消息队列与异步处理
  • 整体隔离版全链路压测
  • TaskBuilder触发前端组件请求后台服务的常见事件
  • 人工智能核心知识:AI Agent的四种关键设计模式
  • 【深度学习】Java DL4J基于多层感知机(MLP)构建公共交通优化模型