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

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

文章目录

    • 前言
    • 一.添加 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);
    }
}

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐