使用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 集合就派上用场了。与数…...

简单介绍----微服务和Spring Cloud
微服务和SpringCloud 1.什么是微服务? 微服务是将一个大型的、单一的应用程序拆分成多个小型服务,每个服务负责实现特定的业务功能,并且可以通过网络通信与其他服务通信。微服务的优点是开发更灵活(不同的微服务可以使用不同的开…...

Jenkins邮件推送配置
目录 涉及Jenkins插件: 邮箱配置 什么是授权码 在第三方客户端/服务怎么设置 IMAP/SMTP 设置方法 POP3/SMTP 设置方法 获取授权码: Jenkins配置 从Jenkins主面板System configuration>System进入邮箱配置 在Email Extension Plugin 邮箱插件…...

硬件知识(1) 手机的长焦镜头
#灵感# 手机总是配备好几个镜头,研究一下 目录 手机常配备的摄像头,及效果举例 长焦的焦距 焦距的定义和示图: IPC的焦距和适用场景: 手机常配备的摄像头,及效果举例 以下是小米某个手机的摄像头介绍:…...

华为机考入门python3--(3)牛客3-明明的随机数
分类:集合、排序 知识点: 集合添加元素 set.add(element) 集合转列表 list(set) 列表排序 list.sort() 题目来自【牛客】 N int(input().strip()) nums set()for i in range(N):nums.add(int(input().strip()))# 集合转列表 nums_list l…...

vue父子组件传值问题
在Vue中,父子组件之间的数据传递可以通过props和事件来实现。 使用props传递数据:父组件可以通过props将数据传递给子组件,子组件可以在模板中直接使用这些数据。父组件可以通过v-bind指令将数据绑定到子组件的props上。例如: v…...

Rider 打开Unity项目 Project 全部显示 load failed
电脑自动更新,导致系统重启,第二天Rider打开Unity 工程,没有任何代码提示,字符串查找也失效。 现象: 1.所有的Project均显示laod failed。点击load failed。右侧信息显示Can not start process 2.选中解决方案进行Bui…...

Maven(下):依赖管理、依赖传递、依赖冲突、工程继承及工程聚合
1. 基于IDEA 进行Maven依赖管理 1.1 依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中…...

网络基础---初识网络
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、局域网…...

【Java】Java类动态替换Class
Java类动态替换Class 通过Java的Class对象,可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取ClassLoader。比如通过Class类获取 // 通过Class获取 ClassLoader classLoade…...

【驱动系列】C#获取电脑硬件显卡核心代号信息
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《驱动系列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点…...