使用POI生成word文档的table表格

文章目录

  • 使用POI生成word文档的table表格
  • 1. 引入maven依赖
  • 2. 生成table的两种方式介绍
    • 2.1 生成一行一列的table
    • 2.2 生成固定行列的table
    • 2.3 table合并列
    • 2.4 创建多个table存在的问题

使用POI生成word文档的table表格

1. 引入maven依赖

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

2. 生成table的两种方式介绍

2.1 生成一行一列的table

//生成一行一列的table
XWPFTable table = document.createTable();
//添加列
table.getRow(0).addNewTableCell();
//添加行(添加的新行默认就是总共的列数)
table.createRow();

测试Demo:CreateTableDemo1.java

package com.poi.word.demo;


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

import java.io.FileOutputStream;

public class CreateTableDemo1 {
    public static void main(String[] args) throws Exception {
        XWPFDocument document = new XWPFDocument();

        //默认创建一行一列table
        XWPFTable table = document.createTable();
        table.setWidth("100%");

        XWPFTableRow first_row = table.getRow(0);
        XWPFTableCell first_Row_first_Cell = first_row.getCell(0);
        first_Row_first_Cell.setText("我是第一行第一列");

        //第一行添加一列
        first_row.addNewTableCell().setText("我是第一行第二列");

        //创建第二行
        XWPFTableRow snd_row = table.createRow();
        snd_row.getCell(0).setText("第二行,第一列");
        snd_row.getCell(1).setText("第二行,第二列");

        //创建第三行
        XWPFTableRow trd_row = table.createRow();
        XWPFParagraph trd_row_first_paragraph = trd_row.getCell(0).getParagraphs().get(0);
        XWPFRun trdRowFirstCellRun = trd_row_first_paragraph.createRun();
        trdRowFirstCellRun.setFontSize(14);
        trdRowFirstCellRun.setBold(true);
        trdRowFirstCellRun.setText("第三行,第一列");

        trd_row.getCell(1).setText("第三行,第二列");

        //创建第四行
        XWPFTableRow row4 = table.createRow();
        row4.getCell(0).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
        row4.getCell(1).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
        row4.getCell(0).setText("第四行");

        FileOutputStream out = new FileOutputStream("D:\\poiword\\create_table1.docx");
        document.write(out);
        out.close();
        document.close();
    }
}

生成结果:
在这里插入图片描述

2.2 生成固定行列的table

//生成3行5列的table
XWPFTable table2 = document.createTable(3, 5);

测试Demo:

package com.poi.word.demo;


import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

import java.io.FileOutputStream;

public class CreateTableDemo2 {

    public static void main(String[] args) throws Exception {
        XWPFDocument document = new XWPFDocument();
        XWPFTable table2 = document.createTable(3, 5);
        table2.setWidth("100%");
        for(int i=0; i<3; i++){
            XWPFTableRow t2tRow = table2.getRow(i);
            for(int j=0; j<5; j++){
                if(i==1){
                    XWPFRun t2Row2Run = t2tRow.getCell(j).getParagraphs().get(0).createRun();
                    t2Row2Run.setFontSize(10);
                    t2Row2Run.setBold(true);
                    t2Row2Run.setText("第"+(i+1)+"行,第"+(j+1)+"列");
                }else{
                    t2tRow.getCell(j).setText("第"+(i+1)+"行,第"+(j+1)+"列");
                }

            }
        }

        FileOutputStream out = new FileOutputStream("D:\\poiword\\create_table2.docx");
        document.write(out);
        out.close();
        document.close();
    }
}

生成结果:
在这里插入图片描述

2.3 table合并列

row4.getCell(0).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
row4.getCell(1).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);

2.4 创建多个table存在的问题

在这里插入图片描述
创建的两个table输出时候合并成了一个table,而且第一个table的宽度也变成了第二个table前两列的宽度。

解决方法:

  1. 添加空段落
    XWPFParagraph paragraph1 = document.createParagraph();
  2. 添加分页(会让两个table在不同的页面)
    document.createParagraph().setPageBreak(true); document.createParagraph().createRun().addBreak(BreakType.PAGE);//推荐方式

添加空段落的解决方法Demo:

package com.poi.word.demo;


import org.apache.poi.xwpf.usermodel.*;

import java.io.FileOutputStream;

public class GenWordTableDemo2 {

    public static void main(String[] args) throws Exception {
        XWPFDocument document = new XWPFDocument();

        //默认创建一行一列table
        XWPFTable table = document.createTable();
        table.setWidth("100%");

        XWPFTableRow first_row = table.getRow(0);
        XWPFTableCell first_Row_first_Cell = first_row.getCell(0);
        first_Row_first_Cell.setText("我是第一行第一列");

        //第一行添加一列
        first_row.addNewTableCell().setText("我是第一行第二列");

        //创建第二行
        XWPFTableRow snd_row = table.createRow();
        snd_row.getCell(0).setText("第二行,第一列");
        snd_row.getCell(1).setText("第二行,第二列");

        //创建第三行
        XWPFTableRow trd_row = table.createRow();
        XWPFParagraph trd_row_first_paragraph = trd_row.getCell(0).getParagraphs().get(0);
        XWPFRun trdRowFirstCellRun = trd_row_first_paragraph.createRun();
        trdRowFirstCellRun.setFontSize(14);
        trdRowFirstCellRun.setBold(true);
        trdRowFirstCellRun.setText("第三行,第一列");

        trd_row.getCell(1).setText("第三行,第二列");

        XWPFParagraph paragraph1 = document.createParagraph();

        //分页的两种方式
        //document.createParagraph().setPageBreak(true);
        //document.createParagraph().createRun().addBreak(BreakType.PAGE);//推荐方式

        /**
         * 第2个table
         */
        XWPFTable table2 = document.createTable(3, 5);
        table2.setWidth("100%");
        XWPFTableRow t2FirstRow = table2.getRow(0);
        for(int i=0; i<3; i++){
            XWPFTableRow t2tRow = table2.getRow(i);
            for(int j=0; j<5; j++){
                if(i==1){
                    XWPFRun t2Row2Run = t2tRow.getCell(j).getParagraphs().get(0).createRun();
                    t2Row2Run.setFontSize(10);
                    t2Row2Run.setBold(true);
                    t2Row2Run.setText("第"+(i+1)+"行,第"+(j+1)+"列");
                }else{
                    t2tRow.getCell(j).setText("第"+(i+1)+"行,第"+(j+1)+"列");
                }

            }
        }

        FileOutputStream out = new FileOutputStream("D:\\poiword\\gen_word2.docx");
        document.write(out);
        out.close();
        document.close();

    }
}

效果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【QT】MDI应用程序设计

目录 1 MDI简介 2 文档窗口类QFormDoc的设计 3 MDI主窗口设计与子窗口的使用 3.1 主窗口界面设计 3.2 MDI子窗口的创建与加入 3.3 QMdiArea常用功能函数 3.4 MDI的信号 1 MDI简介 传统的应用程序设计中有多文档界面&#xff08;Multi-documentInterface&#xff0c;MDI…

Spring源码学习-Spring流程概述(一)

Spring启动的流程 public class Test {public static void main(String[] args) {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("applicationContext.xml");Student bean context.getBean(Student.class);context.close();} }调用…

php低版本(7.4)配置过程中遇到的问题及基本解决手段

目前php不支持较低版本的安装&#xff0c;如果安装低版本必须借助第三方库shivammathur //将第三方仓库加入brewbrew tap shivammathur/php //安装PHPbrew install shivammathur/php/php7.4 可能出现的问题 像这样突然中止然后报错&#xff0c;一般是网络问题&#xff0c;或…

JOSEF约瑟 漏电继电器 JHOK-ZBG1 φ25mm AC220V 30-500ma 1S

系列型号 JHOK-ZBG1一体式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBG2一体式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBG1漏电继电器原为分体式固定式安装&#xff0c;为适应现行安装场合需要&#xff0c;上海约瑟继电器厂在产品原JHOK-ZBG漏电继电器基础上进行产…

Python中元祖的用法

元祖tuple(,) 元祖就是不可变的列表&#xff0c;元祖用()表示,元素与元素之间用逗号隔开,数据类型没有限制。 tu (科比,詹姆斯,乔丹) tu tuple(123) 小括号中有一个元素,有逗号就是元祖,没有就是它本身。 空的小括号就是元祖 索引和切片与列表和字符串相同 不可变指的是,…

Centos使用Docker搭建自己的Gitlab社区版16.8.0-ce.0(设置汉化 修改密码 设置SSH秘钥 添加拉取命令端口号 备份至网盘和恢复)

根据我的经验 部署Gitlab&#xff08;社区版&#xff09; 至少需要2核4g的服务器 带宽3~4M 1. 在自己电脑上安装终端&#xff1a;宝塔ssl终端 或者 FinalShell&#xff0c;根据喜好安装即可 http://www.hostbuf.com/t/988.html http://www.hostbuf.com/downloads/finalshell_w…

什么品牌洗地机最好?专业旗舰级洗地机推荐

作为一个打工族&#xff0c;很能理解大家对日常清洁繁琐的烦恼&#xff0c;尤其是在忙碌工作后难以有力气打扫卫生。这时候&#xff0c;洗地机就是解决问题的利器了。它不仅方便轻松&#xff0c;还能有效消菌杀毒&#xff0c;助力深度清洁。若你正在为选择哪款洗地机而烦恼&…

实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景 在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理&#xff0c;个人感觉word文档中由于包含大量样式信息&#xff0c;批处理时总感觉有顾虑。一者担心影响了文档的格式&#xff0c;误修改了文档的样式&#xff0c;那后果……

计算机网络-数据通信基础知识(数据通信模型 相关术语 单工/半双工/全双工 串行/并行 同步/异步 码元 数据传输速率 带宽)

文章目录 典型的数据通信模型数据通信的相关术语设计数据通信系统要考虑的三个问题单工/半双工/全双工 串行/并行同步/异步小结码元数据传输速率的两种表示方法思考题1思考题2 带宽 典型的数据通信模型 广域网中有模拟信道&#xff0c;模拟信道能传模拟信号&#xff0c;不能传…

Vue2和Vue3生命周期映射关系及异同

目录 一、Vue2 二、Vue3 三、什么是生命周期 四、Vue2和Vue3生命周期映射关系及异同 一、Vue2 Vue是一种用于构建用户界面的渐进式JavaScript框架。它专注于视图层&#xff0c;采用了组件化的开发方式&#xff0c;使得开发者可以轻松地构建复杂的应用程序。 Vue具有以下特…

alfred自定义谷歌翻译workflow

如果要实现自定义workflow&#xff0c;则必须安装付费版的alfred&#xff0c;囊中羞涩的话可以自行淘宝。自定义步骤如下&#xff1a; 1. 新建空的workflow&#xff0c;填写基本信息 2. 开发python脚本 打开该workflow所在目录&#xff0c;进行下面步骤&#xff1a; 首先安装…

app重新签名之后,teamID会改变吗?

哈喽大家好&#xff0c;我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01; 在iOS和macOS开发中&#xff0c;我们经常需要对应用进行重新签名&#xff0c;以便在发布或测试时更改应用的证书或代理。在重新签名应用程序时&#xff0c;可能会出现teamID变化的情况。本文将探…

安科瑞弧光保护装置助力煤矿高压开关柜的可靠供电

摘要 在煤矿高压开关柜运行中&#xff0c;由于受到多种因素的干扰&#xff0c;中低压母线发生故障的概率较高&#xff0c;在中低压母线装设中又没有设置专门的保护&#xff0c;所以开关柜电弧光短路等问题时有发生&#xff0c;对变压器等设备造成一定的损害。鉴于此&#xff0c…

【高效开发工具系列】Intellj IDEA 2023.3 版本

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Git学习 -- 分支合并、版本修改相关

目录 learn GIT Learn Git Branching merge和rebase的使用 基础命令 版本回退 工作区和暂存区 管理修改 撤销修改 删除修改 learn GIT Learn Git Branching 这是Gitee上的Git学习教程 Learn Git Branching Git Rebase Learn Git Branching 最终的实操 merge和rebase的…

常见的6种软件测试用例设计方法

常见的软件测试用例设计方法&#xff0c;个人认为主要是下面这6种&#xff1a; 流程图法&#xff08;也叫场景法&#xff09;等价类划分法边界值分析判定表正交法错误推测法 这6种常见方法中&#xff0c;我分别按照定义、应用场景、使用步骤、案例讲解这4个部分进行讲解。 所…

thinkphp+mysql高校跳蚤二手市场交易系统vue

商品信息是卖家供应用户必不可少的一个部分。在跳蚤市场发展的整个过程中&#xff0c;商品担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类管理系统程序也在不断改进。本课题所设计的普通高校网上跳蚤市场&#xff0c;使用Thinkphp5框架&#xff0c;php语言…

Java日期和时间学习记录2

1、Java的LocalDate类当前时间往未来几天和过去时间几天 import java.time.LocalDate;public class Main {public static void main(String[] args) {// 获取当前日期LocalDate currentDate LocalDate.now();System.out.println("当前日期&#xff1a;" currentDa…

Web09--jQuery基础

1、jQuery概述 1.1 什么是jQuery jQuery是一款优秀的JavaScript的轻量级框架之一&#xff0c;封装了DOM操作、事件绑定、ajax等功能。特别值得一提的是基于jQuery平台的插件非常丰富&#xff0c;大多数前端业务场景都有其封装好的工具可直接使用。 jQuery下载和版本介绍 官…

HTTP动态代理的原理及其对网络性能的影响

HTTP动态代理是一种通过代理服务器来转发HTTP请求和响应数据的网络技术&#xff0c;它可以优化网络性能、提高网络安全性&#xff0c;并解决跨域请求的问题。本文将详细介绍HTTP动态代理的原理及其对网络性能的影响。 一、HTTP动态代理的原理 HTTP动态代理的基本原理是在客户…
最新文章