当前位置: 首页 > news >正文

使用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前两列的宽度。

解决方法:

  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();//默认创建一行一列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# 中&#xff0c;可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类&#xff1a; 派生类&#xff08;子类&#xff09; - 从另一个类继承的类基类&#xff08;父类&#xff09; - 被继承的类 要从一个类继承&#xff0c;使用 : 符号。 在以…...

python在线聊天室(带聊天保存)

python Socket在线聊天室(带聊天保存) 需求功能 1.聊天信息保存功能(服务端会把信息保存到一个txt里面) 2.使用pyqt5框架作为一个可视化界面 3.具备一个服务端和多个客户端的功能 4.具备离线加入黑名单(离线踢出) 5.具备在线加入黑名单(在线加入黑名单被踢出) 6.具备群聊功能…...

jenkins+gitlab实现Android自动打包填坑之旅

一.背景 1.首先你需要知道你想要实现的Android自动打包的Android项目的一些环境配置及需要使用的一些开发版本。 声明&#xff1a;本文 Android项目基于&#xff1a;1.jdk11 2.SDK无要求 3.gradle无要求&#xff08;同Manven一样为项目自动化构建开源工具&#xff09; 注&am…...

洛谷B3625迷宫寻路

迷宫寻路 题目描述 机器猫被困在一个矩形迷宫里。 迷宫可以视为一个 n m n\times m nm 矩阵&#xff0c;每个位置要么是空地&#xff0c;要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。 机器猫初始时位于 ( 1 , 1 ) (1, 1) (1,1) 的位置&#xff0c;问能否…...

GPT-SoVITS 测试

开箱直用版&#xff08;使用 AutoDL&#xff09; step1 打开地址 https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official 选择 AutoDL创建实例&#xff0c;选择 3080ti 机器 step2 创建好实例之后&#xff0c;进入命令行&#xff0c;输入命令 echo {}>…...

人工智能:更多有用的 Python 库

目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在这篇文章中&#xff0c;我们将了解更多的矩阵操作&#xff0c;同时再介绍几个人工智能 Python 库。 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#x…...

Linux BIO如何下发到HDD?

在Linux操作系统中&#xff0c;当创建一个Block I/O请求&#xff08;BIO&#xff09;时&#xff0c;它会被封装成适合硬件交互的数据结构&#xff0c;并通过内核存储子系统传递到对应的硬件控制器上&#xff0c;如SAS&#xff08;Serial Attached SCSI&#xff09;HBA&#xff…...

《动手学深度学习(PyTorch版)》笔记4.6

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…...

Hadoop-MapReduce-源码跟读-客户端篇

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、从WordCount进入源码 用idea将源码加载进来后&#xff0c;找到org.apache.hadoop.examples.WordCount类&#xff08;快捷方法&…...

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…...

滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编

滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编 一、Switch语句1、switch语句 是if语句的简写2、break加与不加有什么特点?default语句可以省略吗&#xff1f;3、游戏中的switch语句&#xff08;示例&#xff09;4、添加case后面的值&#xff0c;一个一个增加&…...

燃烧的指针(三)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;c语言从基础到进阶 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于c语言的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x…...

微服务架构实施攻略:如何选择合适的微服务通信机制?

随着业务的快速发展和系统的日益复杂&#xff0c;传统的单体应用逐渐显露出瓶颈&#xff0c;已无法满足现代软件研发的需求。微服务架构作为一种灵活、可扩展的解决方案&#xff0c;通过将复杂系统拆分为一系列小型服务来提高系统的可伸缩性、灵活性和可维护性。在实施微服务架…...

【jetson笔记】解决vscode远程调试qt.qpa.xcb: could not connect to display报错

配置x11转发 jetson远程安装x11转发 安装Xming Xming下载 安装完成后打开安装目录C:\Program Files (x86)\Xming 用记事本打开X0.hosts文件&#xff0c;添加jetson IP地址 后续IP改变需要重新修改配置文件 localhost 192.168.107.57打开Xlaunch Win菜单搜索Xlaundch打开 一…...

网络安全产品之认识安全隔离网闸

文章目录 一、什么是安全隔离网闸二、安全隔离网闸的主要功能三、安全隔离网闸的工作原理四、安全隔离网闸的分类五、安全隔离网闸与防火墙的区别四、安全隔离网闸的应用场景 随着互联网的发展&#xff0c;网络攻击和病毒传播的方式越来越复杂&#xff0c;对网络安全的要求也越…...

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&#xff1a;fundus 指导 OCT 分类 核心思想设计思路训练和推理 效果总结子问题: 疾病特定特征的提取与蒸馏子问题: 类间关系的理解与建模 核心思想 论文&#xff1a;https://arxiv.org/pdf/2308.00291.pdf 代码&#xff1a;https://github.c…...

代码随想录算法刷题训练营day17

代码随想录算法刷题训练营day17&#xff1a;LeetCode(110)平衡二叉树 LeetCode(110)平衡二叉树 题目 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(…...

Java集合如何选择

为什么使用集合 当需要存储一组类型相同的数据时&#xff0c;数组是最常用且最基本的容器之一。但是&#xff0c;使用数组存储对象存在一些不足之处&#xff0c;因为在实际开发中&#xff0c;存储的数据类型多种多样且数量不确定。这时&#xff0c;Java 集合就派上用场了。与数…...

【花雕学编程】Arduino BLDC 之使用互补滤波进行姿态控制的机器人

从专业工程视角来看&#xff0c;基于Arduino、使用互补滤波进行姿态控制的BLDC&#xff08;无刷直流电机&#xff09;机器人&#xff0c;是一个典型的嵌入式实时闭环控制系统。它集成了传感器数据融合、控制算法和电机驱动&#xff0c;广泛应用于对姿态稳定性有要求的场景。 1、…...

Bilibili-Evolved性能优化实战:突破60fps流畅播放全解析

Bilibili-Evolved性能优化实战&#xff1a;突破60fps流畅播放全解析 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved Bilibili-Evolved作为强大的哔哩哔哩增强脚本&#xff0c;通过深度优化浏…...

如何获取网易云音乐永久链接:终极免费解决方案指南

如何获取网易云音乐永久链接&#xff1a;终极免费解决方案指南 【免费下载链接】netease-cloud-music-api 网易云音乐直链解析 API 项目地址: https://gitcode.com/gh_mirrors/ne/netease-cloud-music-api 你是否曾经遇到过这样的烦恼&#xff1a;好不容易找到一首喜欢的…...

Kandinsky-5.0-I2V-Lite-5s效果展示:建筑图纸→镜头平移漫游视频生成案例

Kandinsky-5.0-I2V-Lite-5s效果展示&#xff1a;建筑图纸→镜头平移漫游视频生成案例 1. 惊艳效果预览 Kandinsky-5.0-I2V-Lite-5s带来的建筑漫游视频生成效果令人印象深刻。想象一下&#xff0c;你有一张静态的建筑设计图纸&#xff0c;通过这个模型&#xff0c;只需简单描述…...

为什么头部AI工厂已全面切换PyTorch 3.0静态图训练?揭秘2024年Q2实测吞吐提升3.8倍、成本下降41%的关键配置

第一章&#xff1a;PyTorch 3.0静态图训练的企业级演进全景PyTorch 3.0标志着深度学习框架从动态优先范式向动静统一架构的关键跃迁。其核心突破在于TorchDynamo Inductor后端的深度融合&#xff0c;使torch.compile()不再仅是实验性优化器&#xff0c;而成为企业级生产训练流…...

为什么92%的Java团队TCC失败?阿里P8级专家复盘6大反模式与可立即上线的加固模板

第一章&#xff1a;为什么92%的Java团队TCC失败&#xff1f;阿里P8级专家复盘6大反模式与可立即上线的加固模板TCC&#xff08;Try-Confirm-Cancel&#xff09;作为分布式事务的经典模式&#xff0c;在高并发、多服务协同场景中本应提供强一致性保障&#xff0c;但阿里内部审计…...

手把手教你用Python实现熵权PCA:从数据清洗到可视化,一个案例全讲透

用Python实战熵权PCA&#xff1a;电商商品竞争力分析全流程解析 在电商平台的海量商品中&#xff0c;如何快速识别出真正具有竞争力的产品&#xff1f;传统的人工筛选方式不仅效率低下&#xff0c;还容易受到主观偏见的影响。本文将带你用Python实现一个完整的熵权PCA分析流程&…...

SenseVoice语音识别模型在Windows/Linux双平台部署全攻略(附SpringBoot API封装技巧)

SenseVoice语音识别模型在Windows/Linux双平台部署全攻略&#xff08;附SpringBoot API封装技巧&#xff09; 语音识别技术正加速渗透企业级应用场景&#xff0c;从智能客服到会议纪要自动化&#xff0c;SenseVoice作为开箱即用的高精度模型&#xff0c;其跨平台兼容性尤为突出…...

springboot+vue基于web的校园商铺摊位管理系统

目录功能模块分析技术实现要点扩展功能建议数据库设计关键表项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作##同行可拿货,招校园代理 ,本人源头供货商功能模块分析 后台管理模块&#xff08;SpringBoot&#xff09; 管理员登…...

06. Flutter Hero动画实现:让界面过渡更加优雅

06. Flutter Hero动画实现&#xff1a;让界面过渡更加优雅 引言 Flutter 的 Hero 动画是一种神奇的过渡效果&#xff0c;它能让元素在不同页面之间平滑过渡&#xff0c;创造出连贯且令人愉悦的用户体验。作为一名把代码当散文写的 UI 匠人&#xff0c;我始终认为&#xff1a;好…...