使用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();//默认创建一行一列tableXWPFTable 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前两列的宽度。
解决方法:
- 添加空段落
XWPFParagraph paragraph1 = document.createParagraph(); - 添加分页(会让两个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();//默认创建一行一列tableXWPFTable 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();}
}
效果:

相关文章:
使用POI生成word文档的table表格
文章目录 使用POI生成word文档的table表格1. 引入maven依赖2. 生成table的两种方式介绍2.1 生成一行一列的table2.2 生成固定行列的table2.3 table合并列2.4 创建多个table存在的问题 使用POI生成word文档的table表格 1. 引入maven依赖 <dependency><groupId>org.…...
C# 继承、多态性、抽象和接口详解:从入门到精通
C# 继承 在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以…...
python在线聊天室(带聊天保存)
python Socket在线聊天室(带聊天保存) 需求功能 1.聊天信息保存功能(服务端会把信息保存到一个txt里面) 2.使用pyqt5框架作为一个可视化界面 3.具备一个服务端和多个客户端的功能 4.具备离线加入黑名单(离线踢出) 5.具备在线加入黑名单(在线加入黑名单被踢出) 6.具备群聊功能…...
jenkins+gitlab实现Android自动打包填坑之旅
一.背景 1.首先你需要知道你想要实现的Android自动打包的Android项目的一些环境配置及需要使用的一些开发版本。 声明:本文 Android项目基于:1.jdk11 2.SDK无要求 3.gradle无要求(同Manven一样为项目自动化构建开源工具) 注&am…...
洛谷B3625迷宫寻路
迷宫寻路 题目描述 机器猫被困在一个矩形迷宫里。 迷宫可以视为一个 n m n\times m nm 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。 机器猫初始时位于 ( 1 , 1 ) (1, 1) (1,1) 的位置,问能否…...
GPT-SoVITS 测试
开箱直用版(使用 AutoDL) step1 打开地址 https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official 选择 AutoDL创建实例,选择 3080ti 机器 step2 创建好实例之后,进入命令行,输入命令 echo {}>…...
人工智能:更多有用的 Python 库
目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在这篇文章中,我们将了解更多的矩阵操作,同时再介绍几个人工智能 Python 库。 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&#x…...
Linux BIO如何下发到HDD?
在Linux操作系统中,当创建一个Block I/O请求(BIO)时,它会被封装成适合硬件交互的数据结构,并通过内核存储子系统传递到对应的硬件控制器上,如SAS(Serial Attached SCSI)HBAÿ…...
《动手学深度学习(PyTorch版)》笔记4.6
注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…...
Hadoop-MapReduce-源码跟读-客户端篇
一、源码下载 下面是hadoop官方源码下载地址,我下载的是hadoop-3.2.4,那就一起来看下吧 Index of /dist/hadoop/core 二、从WordCount进入源码 用idea将源码加载进来后,找到org.apache.hadoop.examples.WordCount类(快捷方法&…...
《游戏-03_3D-开发》之—新输入系统人物移动攻击连击
本次修改unity的新输入输出系统。本次修改unity需要重启,请先保存项目, 点击加号起名为MyCtrl, 点击加号设置为一轴的, 继续设置W键, 保存 生成自动脚本, 修改MyPlayer代码: using UnityEngine;…...
滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编
滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编 一、Switch语句1、switch语句 是if语句的简写2、break加与不加有什么特点?default语句可以省略吗?3、游戏中的switch语句(示例)4、添加case后面的值,一个一个增加&…...
燃烧的指针(三)
🌈个人主页:小田爱学编程 🔥 系列专栏:c语言从基础到进阶 🏆🏆关注博主,随时获取更多关于c语言的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &#x…...
微服务架构实施攻略:如何选择合适的微服务通信机制?
随着业务的快速发展和系统的日益复杂,传统的单体应用逐渐显露出瓶颈,已无法满足现代软件研发的需求。微服务架构作为一种灵活、可扩展的解决方案,通过将复杂系统拆分为一系列小型服务来提高系统的可伸缩性、灵活性和可维护性。在实施微服务架…...
【jetson笔记】解决vscode远程调试qt.qpa.xcb: could not connect to display报错
配置x11转发 jetson远程安装x11转发 安装Xming Xming下载 安装完成后打开安装目录C:\Program Files (x86)\Xming 用记事本打开X0.hosts文件,添加jetson IP地址 后续IP改变需要重新修改配置文件 localhost 192.168.107.57打开Xlaunch Win菜单搜索Xlaundch打开 一…...
网络安全产品之认识安全隔离网闸
文章目录 一、什么是安全隔离网闸二、安全隔离网闸的主要功能三、安全隔离网闸的工作原理四、安全隔离网闸的分类五、安全隔离网闸与防火墙的区别四、安全隔离网闸的应用场景 随着互联网的发展,网络攻击和病毒传播的方式越来越复杂,对网络安全的要求也越…...
Java通过模板替换实现excel的传参填写
以模板为例子 将上面$转义的内容替换即可 package com.gxuwz.zjh.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.HashMap; import java.util.Map; import java.io.IOException; impor…...
眼底增强型疾病感知蒸馏模型 FDDM:无需配对,fundus 指导 OCT 分类
眼底增强型疾病感知蒸馏模型 FDDM:fundus 指导 OCT 分类 核心思想设计思路训练和推理 效果总结子问题: 疾病特定特征的提取与蒸馏子问题: 类间关系的理解与建模 核心思想 论文:https://arxiv.org/pdf/2308.00291.pdf 代码:https://github.c…...
代码随想录算法刷题训练营day17
代码随想录算法刷题训练营day17:LeetCode(110)平衡二叉树 LeetCode(110)平衡二叉树 题目 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(…...
Java集合如何选择
为什么使用集合 当需要存储一组类型相同的数据时,数组是最常用且最基本的容器之一。但是,使用数组存储对象存在一些不足之处,因为在实际开发中,存储的数据类型多种多样且数量不确定。这时,Java 集合就派上用场了。与数…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
MySQL基本操作(续)
第3章:MySQL基本操作(续) 3.3 表操作 表是关系型数据库中存储数据的基本结构,由行和列组成。在MySQL中,表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...
