当前位置: 首页 > 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 集合就派上用场了。与数…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...