【工具类】使用Java代码编写,在XWPFDocument对象中写入一个5行6列的表格,其中第一行合并6行做为表头;第二行为标题行,从左向右每个单元格内容分别是序号、车间、总数、新数、确认数、恢复数

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌

技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。

感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我留言咨询,希望帮助更多的人。

一、背景描述

使用Java代码编写,在XWPFDocument对象中写入一个5行6列的表格,其中第一行合并6行做为表头;第二行为标题行,从左向右每个单元格内容分别是序号、车间、报警总数、新报警数、确认数、恢复数,第三行及以后行为数据行,最后保存到本地磁盘中。需求是Java代码实现数据导出为Word文档,文档中包含表格内容。

二、代码实现

2.1 代码实现

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;

import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;

public class CreateTableExample {
    public static void main(String[] args) throws IOException {
        // 创建新文档
        XWPFDocument document = new XWPFDocument();

        // 创建表格(初始为 2 行 6 列,表头和标题行)
        XWPFTable table = document.createTable(2, 6);

        // 设置表格宽度为页面宽度的 100%
        CTTblWidth tableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
        tableWidth.setType(STTblWidth.PCT); // 宽度类型为百分比
        tableWidth.setW(BigInteger.valueOf(5000)); // 5000 = 100% (5000 / 50 = 100%)

        // 合并第一行的 6 列作为表头
        mergeCellsHorizontally(table, 0, 0, 5); // 从第 0 列到第 5 列合并
        XWPFTableRow headerRow = table.getRow(0);
        headerRow.getCell(0).setText("报警统计表"); // 设置表头内容

        // 设置第二行为标题行
        XWPFTableRow titleRow = table.getRow(1);
        String[] titles = {"序号", "车间", "报警总数", "新报警数", "确认数", "恢复数"};
        for (int i = 0; i < titles.length; i++) {
            titleRow.getCell(i).setText(titles[i]);
        }

        // 填充数据行(动态添加行)
        String[][] data = {
                {"1", "车间A", "10", "2", "8", "7"},
                {"2", "车间B", "15", "3", "12", "10"},
                {"3", "车间C", "8", "1", "6", "5"},
                {"4", "车间D", "20", "5", "15", "12"}
        };
        for (int i = 0; i < data.length; i++) {
            XWPFTableRow dataRow = table.createRow(); // 动态添加新行
            for (int j = 0; j < data[i].length; j++) {
                dataRow.getCell(j).setText(data[i][j]);
            }
        }

        // 保存文档到本地磁盘
        try (FileOutputStream out = new FileOutputStream("TableExample.docx")) {
            document.write(out);
        }

        // 关闭文档
        document.close();
        System.out.println("表格已创建并保存到 TableExample.docx");
    }

    /**
     * 合并表格中的单元格(水平合并)
     *
     * @param table     表格对象
     * @param row       行索引
     * @param startCol  起始列索引
     * @param endCol    结束列索引
     */
    private static void mergeCellsHorizontally(XWPFTable table, int row, int startCol, int endCol) {
        for (int i = startCol; i <= endCol; i++) {
            XWPFTableCell cell = table.getRow(row).getCell(i);
            if (i == startCol) {
                // 第一个单元格设置合并范围
                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
            } else {
                // 后续单元格设置为继续合并
                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
            }
        }
    }
}

2.2 代码说明

  • 创建表格:使用 document.createTable(5, 6) 创建一个 5 行 6 列的表格。

  • 合并表头单元格:使用 mergeCellsHorizontally 方法合并第一行的 6 列,作为表头。

  • 设置标题行:第二行的每个单元格分别设置为 “序号”、“车间”、“报警总数”、“新报警数”、“确认数”、“恢复数”。

  • 填充数据行:从第三行开始填充数据,数据内容为二维数组 data 中的值。

  • 保存文档:使用 FileOutputStream 将文档保存到本地磁盘,文件名为 TableExample.docx。

三、运行结果

生成的 TableExample.docx 文件内容如下:

在这里插入图片描述


好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 “点赞” 和 “关注” 哦,我们下次见!🎈

本文完结!

祝各位大佬和小伙伴身体健康,万事如意,发财暴富,扫下方二维码与我一起交流!!!在这里插入图片描述

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

No8g攻城狮

向每一个努力改变现状的你致敬!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值