Java使用poi生成word文档的简单实例

Java使用poi生成word文档的简单实例

生成的效果如下:
在这里插入图片描述

用到的poi的简单的知识

新建一个word对象

//新建文件
XWPFDocument document = new XWPFDocument();

新建段落以及文字样式

//创建段落
XWPFParagraph paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);//创建标题
XWPFRun titleFun = paragraph.createRun();
titleFun.setText("个人信息表");
titleFun.setBold(true);
titleFun.setFontSize(25);
titleFun.setColor("000000");
titleFun.setFontFamily("宋体");
titleFun.addBreak();

titleFun.addBreak(); 换行

实例-生成一个简单word文档

新建一个maven项目

pom.xml 导入5.2.5的poi的依赖包

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

新建SimpleWord.java文件

文件内容如下:

package com.wumeng.wordexport;import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** @author wumeng 2024/6/27 17:56*/
public class SimpleWord {/*** 新建word* @throws IOException*/static void newWord(String outputPath) throws IOException {//新建文件XWPFDocument document = new XWPFDocument();//创建段落XWPFParagraph paragraph = document.createParagraph();paragraph.setAlignment(ParagraphAlignment.CENTER);//创建标题XWPFRun titleFun = paragraph.createRun();titleFun.setText("个人信息表");titleFun.setBold(true);titleFun.setFontSize(25);titleFun.setColor("000000");titleFun.setFontFamily("宋体");titleFun.addBreak();//添加引言XWPFParagraph paragraph2 = document.createParagraph();paragraph2.setAlignment(ParagraphAlignment.CENTER);XWPFRun titleFun2 = paragraph2.createRun();titleFun2.setText("引言");titleFun2.setBold(true);titleFun2.setFontSize(20);titleFun2.setColor("000000");titleFun2.setFontFamily("宋体");titleFun2.addBreak();//添加第一段内容XWPFParagraph paragraph3 = document.createParagraph();paragraph3.setAlignment(ParagraphAlignment.LEFT);XWPFRun titleFun3 = paragraph3.createRun();titleFun3.setText("个人信息表");titleFun3.setBold(true);titleFun3.setFontSize(14);titleFun3.setColor("000000");titleFun3.setFontFamily("宋体");XWPFRun titleFun4 = paragraph3.createRun();titleFun4.setText(",(注:以下内容请根据个人情况如实填写)");titleFun4.setFontSize(14);titleFun4.setColor("000000");titleFun4.setFontFamily("宋体");titleFun4.addBreak();//创建表格XWPFTable table = document.createTable(1,3);SimpleWordUtil.setTableWidthAndHAlign(table, "9072",STJcTable.Enum.forString("center"));List<String> headers = new ArrayList<String>();headers.add("姓名");headers.add("性别");headers.add("年龄");for (int i = 0; i < headers.size(); i++) {XWPFTableCell cell = table.getRow(0).getCell(i);XWPFParagraph cellParagraph = cell.getParagraphArray(0);cellParagraph.setAlignment(ParagraphAlignment.CENTER);XWPFRun cellParagraphRun = cellParagraph.createRun();cellParagraphRun.setFontSize(12);cellParagraphRun.setFontFamily("宋体");cellParagraphRun.setText(headers.get(i));cellParagraphRun.setBold(true);}List<List<String>> lists = new ArrayList<List<String>>();List<String> list1 = new ArrayList<String>();list1.add("黄xx");list1.add("男");list1.add("18");lists.add(list1);List<String> list2 = new ArrayList<String>();list2.add("王xx");list2.add("女");list2.add("16");lists.add(list2);for (int i = 0; i < lists.size(); i++) {table.createRow();for (int j = 0; j < lists.get(i).size(); j++) {XWPFTableCell cell = table.getRow(i+1).getCell(j);XWPFParagraph cellParagraph = cell.getParagraphArray(0);cellParagraph.setAlignment(ParagraphAlignment.CENTER);XWPFRun cellParagraphRun = cellParagraph.createRun();cellParagraphRun.setFontSize(12);cellParagraphRun.setFontFamily("宋体");cellParagraphRun.setText(lists.get(i).get(j));}}//保存文档SimpleWordUtil.saveDocument(document, outputPath);}public static void main(String[] args) throws Exception {newWord("./14.docx");}}

相关工具类SimpleWordUtil.java

package com.wumeng.wordexport;import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigInteger;/*** @author wumeng 2024/6/27 18:03*/
public class SimpleWordUtil {/*** 获取表格属性* @param table* @return*/public static CTTblPr getTableCTTblPr(XWPFTable table) {CTTbl ttbl = table.getCTTbl();// 表格属性CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();return tblPr;}/*** 设置表格宽度和水平对齐方式* @param table* @param width* @param enumValue*/public static void setTableWidthAndHAlign(XWPFTable table, String width,STJcTable.Enum enumValue) {CTTblPr tblPr = getTableCTTblPr(table);// 表格宽度CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();if (enumValue != null) {CTJcTable ctJcTable = tblPr.addNewJc();ctJcTable.setVal(enumValue);}// 设置宽度tblWidth.setW(new BigInteger(width));tblWidth.setType(STTblWidth.DXA);}/*** 保存文档* @param document* @param savePath* @throws IOException*/public static void saveDocument(XWPFDocument document, String savePath) throws IOException {OutputStream os = new FileOutputStream(savePath);document.write(os);os.close();}
}

运行,就可以看到效果了!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React学习(三)

React的核心理论主要围绕其构建用户界面的方式&#xff0c;下面将分点详细解释React的核心理论&#xff1a; 组件化&#xff1a; React的核心概念是组件化&#xff0c;即将UI拆分成多个独立、可复用的部分&#xff0c;这些部分就是组件。组件可以是class组件或函数组件&#x…

Idea启动服务报 Command line is too long

一、背景 合不同分支代码后&#xff0c;启动服务报 Error running Application, Command line is too long, Shorten the command line via JAR manifest or via a classpath file and rerun. 没有在意&#xff0c;然后点击了manifest 来进行 二、问题 然后自己在重新启动&…

单线程单元模型简述

单线程单元模型简述 单线程单元&#xff08;Single-Threaded Apartment, STA&#xff09;模型是Windows COM&#xff08;Component Object Model&#xff09;技术中定义的一种线程同步模型。在STA模型中&#xff0c;每个线程都拥有自己的独立地址空间&#xff0c;并且假设该线…

Linux网络编程:套接字编程

1.Socket套接字编程 1.1.什么是socket套接字编程 Socket套接字编程 是一种基于网络层和传输层网络通信方式&#xff0c;它允许不同主机上的应用程序之间进行双向的数据通信。Socket是网络通信的基本构件&#xff0c;它提供了不同主机间的进程间通信端点的抽象。一个Socket就是…

智能猫砂盆到底是不是智商税?解救上班族双手的测评合集来了

不得不说&#xff0c;像我这样的上班族真的是很需要一个智能猫砂盆了。普通的猫砂盆一天就要打扫3次&#xff0c;遇到很能拉的猫咪的时候&#xff0c;就不止是三次那么简单了。如果有个产品能帮我解决这个问题&#xff0c;让我能放心外出&#xff0c;那又何乐而不为呢&#xff…

马面裙的故事:汉服如何通过直播电商实现产业跃迁

【潮汐商业评论/原创】 波澜壮阔的千里江山在马面裙的百褶上展开&#xff0c;织金花纹在女性的步伐之间若隐若现&#xff0c;从明清到现代&#xff0c;如今马面裙又流行了回来&#xff0c;成为女性的流行单品&#xff0c;2024年春节期间&#xff0c;马面裙更是成为华夏女孩们的…

Halcon 如何根据特征过滤区域和XLD

一 如何跟进特征过滤区域和XLD dev_open_window(0,0,512,512,black,WindowHandle)read_image(Image,fabrik)threshold(Image,Region,128,255)connection(Region,ConnectedRegions)*根据面积范围[8000,9000] dev_display(Image)select_shape(ConnectedRegions,SelectedRegions,…

【Vue】集成富文本编辑器

这文章使用的是wangeditor插件&#xff0c;官网地址&#xff1a;wangEditor&#xff0c;这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…

Modbus为何要转成EtherCAT

1. Modbus是什么&#xff1f; Modbus是一种工业通信协议&#xff0c;广泛应用于工业自动化领域。它支持多种通信方式&#xff0c;包括RS-232、RS-485和TCP/IP等。Modbus协议简单易用&#xff0c;能够实现设备之间的数据交换和控制命令的传输。然而&#xff0c;它在数据传输速率…

Tesseract OCR识图工具,通过composer接入hyperf使用

本文主要使用编译安装&#xff0c;yum安装未深入研究为何无法使用 一、下载依赖 sudo yum install -y gcc gcc-c make autoconf automake libtool pkgconfig sudo yum install -y leptonica leptonica-devel这里额外记录一下我踩的坑&#xff0c;第二个依赖安装的时候出现了一…

Mac电脑安装HomeBrew工具(100%成功)

1.Homebrew是什么&#xff1f; homebrew是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等功能。通过简单的指令可以实现包管理&#xff0c;而不用关心各种依赖和文件路径情况。 2.homebrew常用命令 检测是否安装HomeBrew: brew -v卸载Hom…

【杂记-浅谈OSPF协议之Hello、DD、LSR、LSU、LSAck报文】

OSPF中的各种报文 一、Hello报文二、DD报文三、LSR报文四、LSU报文五、LSAck报文 一、Hello报文 Hello报文周期性发送&#xff0c;用来发现和维持OSPF邻居关系&#xff0c;其中&#xff0c;Hello报文包含的字段有&#xff1a; 1、Network Mask&#xff1a;发送Hello报文的接口…

8. Revit API UI: DockablePane(可停靠窗口)

8. Revit API UI: DockablePane&#xff08;可停靠窗口&#xff09; 接着前面的预览控件和外部事件&#xff0c;这一篇&#xff0c;我们来看看可停靠窗口DockablePane的实现。 实现流程 可停靠窗口相关的类与接口主要有DockablePane和IDockablePageProvider&#xff0c;都是…

具备生成自签名文档证书能力的印章管理软件_电子骑缝章软件

最新版的e-章宝具体生成自签名文档证书的能力&#xff0c;这种证书可用内部文档发布的签名&#xff0c;文档一旦用证书签名并发布&#xff0c;具有不可抵赖性&#xff0c;阅读者也能确认所发布的文档是否是发布者发布的&#xff08;即中途有没有被他人恶意修改过&#xff09;&a…

Qt样式表及相关案例

一.Qt样式表介绍 Qt样式表是一个可以自定义部件外观的强大机制&#xff0c;样式表的概念、术语、语法均受到HTML的层叠样式表(Cascading Style Sheets,CSS)的启发。 样式表可通过QApplication::setStyleSheet()函数将其设置到整个应用程序上&#xff0c;也可以使用QWidget::se…

*算法训练(leetcode)第十九天 | 77. 组合、216. 组合总和 III、17. 电话号码的字母组合

刷题记录 *77. 组合216. 组合总和 III*17. 电话号码的字母组合 *77. 组合 leetcode题目地址 回溯法。result记录最终结果&#xff0c;cur_result记录单个组合的结果。 比较难理解的地方在于回溯要撤销对于结点的处理&#xff0c;也就是cur_result.pop_back(); 在for循环中&a…

python Process 多进程处理单个文件

Python 的 multiprocessing 模块可以用来创建多进程以并行处理任务,从而加速对大文件或其他耗时操作的处理。处理单个文件时,可以将文件内容分割成多个部分,每个部分由一个单独的进程处理。以下是一个简单的例子,说明如何使用多进程处理单个文件中的数据行: 基本思路 1. 读…

第9关:索引(2024数据库期末综合)

第9关&#xff1a;索引&#xff08;注意看下面的温馨提示&#xff01;&#xff01;&#xff09; 任务描述 湖南人口hnpeople数据表结构如图所示&#xff0c;各字段含义如下 cs&#xff08;城市)、qx(区县)、rk(人口)、man(男)、woman(女)、child(儿童)、adult(成人)、old(老人)…

揭秘数据合并的秘密:一文掌握一对一、多对一、多对多合并技巧与实战!

使用pd.merge()合并 类似 MySQL 中表和表直接的合并merge与concat的区别在于,merge需要依据某一共同的行或列来进行合并使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并每一列元素的顺序不要求一致1. 一对一合并 df1 = pd.DataFrame({"…

2025深圳数字广电及网络视听大会暨展览会

2025深圳数字广电及网络视听大会暨展览会 数字引领 网聚未来 时间&#xff1a;2025.6.25-27日 地点&#xff1a;深圳国际会展中心(宝安新馆) 指导单位&#xff1a; 中国广播电视社会组织联合会 主办单位&#xff1a; 中央广播电视总台国际在线广东频道 中国广播电视社会组织…