POI:对Word的基本操作

1 向word中写入文本并设置样式

package com.example;import org.apache.poi.xwpf.usermodel.*;import java.io.File;
import java.io.FileOutputStream;/*** @Author:xiexu* @Date:2024/1/12 23:54*/
public class WriteWord {static String PATH = "D:\\Idea-projects\\POI_word";public static void main(String[] args) throws Exception {// 1. 创建文档XWPFDocument document = new XWPFDocument();// 2. 创建一个标题段落XWPFParagraph titleParagraph = document.createParagraph();// 设置段落为居中titleParagraph.setAlignment(ParagraphAlignment.CENTER);// 3. 创建第一段的运行XWPFRun titleParagraphRun = titleParagraph.createRun();// 4. 设置文本titleParagraphRun.setText("这是一个标题");// 5. 设置第一个段落中文本样式titleParagraphRun.setFontSize(20);titleParagraphRun.setBold(true);titleParagraphRun.setFontFamily("宋体");titleParagraphRun.setColor("FF0000");// 6. 创建第二个段落XWPFParagraph contentParagraph = document.createParagraph();// 设置段落为左对齐contentParagraph.setAlignment(ParagraphAlignment.LEFT);// 设置首行缩进contentParagraph.setIndentationFirstLine(400);contentParagraph.setBorderBottom(Borders.BASIC_BLACK_DASHES);  // 加边框(上右下左都可以)// 7. 创建第二段的运行XWPFRun contentParagraphRun = contentParagraph.createRun();// 8. 设置文本 (这边使用StringBuffer来拼接字符,来模拟文章效果)StringBuffer content = new StringBuffer();for (int i = 0; i < 50; i++) {content.append("小蟹学Java-POI");}contentParagraphRun.setText(content.toString());contentParagraphRun.setItalic(true);//twoParagraphRun.setStrike(true);  // 删除线// contentParagraphRun.setSubscript(VerticalAlign.SUBSCRIPT);  // 下标contentParagraphRun.addBreak();  // 添加个换行// 9. 创建第三个段落XWPFParagraph endParagraph = document.createParagraph();// 设置段落为右对齐endParagraph.setAlignment(ParagraphAlignment.RIGHT);// 10. 创建第三个段的运行XWPFRun endParagraphRun = endParagraph.createRun();// 11.设置文本endParagraphRun.setText("结束");endParagraphRun.setFontSize(16);endParagraphRun.setColor("8E0500");// 创建一个文件对象File file = new File(PATH + "\\write_word.docx");// 创建一个文件输出流FileOutputStream fileOutputStream = new FileOutputStream(file);// 通过输出流,将目标文件写入到磁盘document.write(fileOutputStream);// 关闭输出流fileOutputStream.close();// 输出提示System.out.println("文件创建成功");}
}

 

2 创建基础的表格

package com.example;import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;/*** @Author:xiexu* @Date:2024/1/13 10:18*/
public class WriteTable {static String PATH = "D:\\Idea-projects\\POI_word";public static void main(String[] args) throws Exception {XWPFDocument document = new XWPFDocument();// 创建表格XWPFTable table = document.createTable();// 创建第一行XWPFTableRow oneRow = table.getRow(0);oneRow.getCell(0).setText("col one, row one");oneRow.addNewTableCell().setText("col two, row one");oneRow.addNewTableCell().setText("col three, row one");// 创建第二行XWPFTableRow twoRow = table.createRow();twoRow.getCell(0).setText("col one, row two");twoRow.getCell(1).setText("col two, row two");twoRow.getCell(2).setText("col three, row two");// 创建第三行XWPFTableRow threeRow = table.createRow();threeRow.getCell(0).setText("col one, row three");threeRow.getCell(1).setText("col two, row three");threeRow.getCell(2).setText("col three, row three");File file = new File(PATH + "\\write_table.docx");FileOutputStream fileOutputStream = new FileOutputStream(file);document.write(fileOutputStream);fileOutputStream.close();System.out.println("表格写入成功!");}
}

 

3 给表格添加样式

 在这边的话,就不用上述的方法创建表格了,直接给出行数和列数也是可以直接创建表格的

package com.example;import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.io.File;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.util.List;/*** @Author:xiexu* @Date:2024/1/13 10:40*/
public class SetTableStyle {static String PATH = "D:\\Idea-projects\\POI_word";public static void main(String[] args) throws Exception {// 1. 创建一个文档对象XWPFDocument document = new XWPFDocument();// 2. 给出行数和列数int RowNums = 5;int colNums = 6;// 3.  创建表格对象XWPFTable table = document.createTable(RowNums, colNums);// 4. 设置表格样式// 4.1 获取表格(table)的属性对象(CTTblPr),该对象用于描述表格的一些属性,例如样式、边框等CTTblPr tblPr = table.getCTTbl().getTblPr();// 4.2创建一个新的表格样式对象(CTString),并将其添加到表格属性对象中CTString tblStyle = tblPr.addNewTblStyle();// 4.3设置表格样式对象的值为 "TableStyle"tblStyle.setVal("TableStyle");// 4.4 获取所有的行并设置样式List<XWPFTableRow> rows = table.getRows();int currentRow = 0;int currentCol = 0;for (XWPFTableRow row : rows) {// 设置行高CTTrPr ctTrPr = row.getCtRow().addNewTrPr();CTHeight ctHeight = ctTrPr.addNewTrHeight();ctHeight.setVal(BigInteger.valueOf(300));// 设置单元格样式List<XWPFTableCell> cells = row.getTableCells();for (XWPFTableCell cell : cells) {// 4.5 设置单元格样式// 获取单元格(cell)的属性对象(CTTcPr),该对象用于描述单元格的一些属性,例如宽度、边框、垂直对齐方式等。CTTcPr ctTcPr = cell.getCTTc().addNewTcPr();// 创建一个新的垂直对齐方式对象(CTVerticalJc),并将其添加到单元格属性对象中。CTVerticalJc ctVerticalJc = ctTcPr.addNewVAlign();// 设置垂直对齐方式对象的值为 "CENTER",将单元格中的内容垂直居中显示ctVerticalJc.setVal(STVerticalJc.CENTER);  // 枚举,可以有多种// 设置单元格阴影样式CTShd ctShd = ctTcPr.addNewShd();ctShd.setColor("auto");ctShd.setVal(STShd.CLEAR);  // 枚举,可以有多种// 头行和内容行的阴影颜色应有区别  (需要定义当前行和当前列的变量)if (currentRow == 0) {ctShd.setFill("FFFFCC");} else {ctShd.setFill("90EE90");}// 设置单元格中的内容样式XWPFParagraph xwpfParagraph = cell.getParagraphs().get(0);XWPFRun cellRun = xwpfParagraph.createRun();// 设置居中xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);// 内容的样式也是需要区分头行和内容行的if (currentRow == 0) {cellRun.setFontSize(18);cellRun.setBold(true);cellRun.setColor("FF0000");}// 设置单元格内容if (currentRow == 0) {cellRun.setText("header" + (currentCol+1));} else {cellRun.setText("content" + (currentCol+1));}currentCol++;}currentCol = 0;   // 一行中的单元格遍历结束后,需要恢复值为0currentRow++;}// 在这边也可以判断路径是否存在, 如果不存在, 则创建路径File path = new File(PATH);if (!path.exists()) {path.mkdirs();}// 创建文件对象File file = new File(PATH + "\\write_tableStyle.docx");//  创建输出流FileOutputStream fileOutputStream = new FileOutputStream(file);document.write(fileOutputStream);fileOutputStream.close();System.out.println("表格样式设置完成");}
}

4 写入图片

package com.example;import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;import java.io.FileInputStream;
import java.io.FileOutputStream;/*** @Author:xiexu* @Date:2024/1/13 11:44*/
public class Write_img {static String PATH = "D:\\Idea-projects\\POI_word";public static void main(String[] args) throws Exception {// 1. 定义一个图片路径String imgPath = "D:\\Idea-projects\\POI_word\\beag.png";// 2.  创建一个文件对象XWPFDocument document = new XWPFDocument();// 3.创建一个段落XWPFParagraph paragraph = document.createParagraph();//4.创建运行区域XWPFRun run = paragraph.createRun();// 5.写入图片// 将文件路径写入word文档run.setText("图片路径:" + imgPath);// 换行run.addBreak();// 增加图片到运行区域// 创建一个输入流FileInputStream fileInputStream = new FileInputStream(imgPath);run.addPicture(fileInputStream, Document.PICTURE_TYPE_PNG, imgPath, Units.toEMU(400), Units.toEMU(250));// 第一个参数是输入流、// 第二个参数是图片的类型、// 第三个参数是图片的路径、// 第四个参数是图片的宽度、// 第五个参数是图片的高度// 6.另起一个页面run.addBreak(BreakType.PAGE);// 7. 写入到磁盘// 创建一个输出流FileOutputStream outputStream = new FileOutputStream(PATH + "\\write_img.docx");document.write(outputStream);outputStream.close();System.out.println("图片写入完成");}
}


5 读取文档中内容

package com.exampleRead;import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.File;
import java.io.FileInputStream;/*** @Author:xiexu* @Date:2024/1/13 12:04*/
public class ReadWord {public static void main(String[] args) throws Exception {// 找到用读取的目标文件File file = new File("D:\\Idea-projects\\POI_word\\write_word.docx");// 创建输入流,将文件写入输入流FileInputStream fileInputStream = new FileInputStream(file);// 创建一个文档对象,将输入流写入文档对象XWPFDocument document = new XWPFDocument(fileInputStream);// 创建一个文档执行器XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(document);// 输出文档内容String text = xwpfWordExtractor.getText();System.out.println(text);fileInputStream.close();}
}


读取目标文档中其它的属性信息 


 


这些属性信息可以在创建文件的时候,可以设置进去


 

6 读取文档中的图片

package com.exampleRead;import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFRun;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Author:xiexu* @Date:2024/1/13 12:32*/
public class Read_img {public static void main(String[] args) throws Exception {// 定义一个待读取的文件路径String filePath = "D:\\Idea-projects\\POI_word\\write_img.docx";File Path = new File(filePath);// 判断路径是否存在if (!Path.exists()) {System.out.println("文件不存在");return;}// 创建一个输入流FileInputStream fileInputStream = new FileInputStream(filePath);// 创建一个文档对象XWPFDocument document = new XWPFDocument(fileInputStream);// 定义一个HashMap来存储图片的信息Map<String, byte[]> ImagesHashMap = new HashMap<>();// 获取所有段落List<XWPFParagraph> paragraphs = document.getParagraphs();// 遍历所有段落for (XWPFParagraph paragraph : paragraphs) {List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {// 获取运行区域的所有图片List<XWPFPicture> pictures = run.getEmbeddedPictures();// 遍历图片for (XWPFPicture picture : pictures) {// 我们需要定义一个HashMap来存储图片的信息String fileName = picture.getPictureData().getFileName();byte[] data = picture.getPictureData().getData();  // 是以二进制的形式ImagesHashMap.put("D:\\Idea-projects\\POI_word\\poi1"+fileName, data);}}}// 遍历ImagesHashMap集合for (Map.Entry<String, byte[]> entry : ImagesHashMap.entrySet()) {String FilePathKey = entry.getKey();byte[] Filevalue = entry.getValue();System.out.println("开始写入图片...");// 创建一个输出流FileOutputStream fileOutputStream = new FileOutputStream(FilePathKey);fileOutputStream.write(Filevalue);fileOutputStream.close();System.out.println("图片写入完成...");}}
}

7 读取文档中表格的内容

package com.exampleRead;import org.apache.poi.xwpf.usermodel.*;import java.io.File;
import java.io.FileInputStream;
import java.util.List;/*** @Author:xiexu* @Date:2024/1/13 13:01*/
public class Read_table {public static void main(String[] args) throws Exception {// 定义一个待读取的文件路径String filePath = "D:\\Idea-projects\\POI_word\\write_tableStyle.docx";// 判断路径是否存在File pathCheck = new File(filePath);if (!pathCheck.exists()){System.out.println("文件路径不存在");return;}// 创建一个输入流FileInputStream fileInputStream = new FileInputStream(filePath);// 创建一个文档对象XWPFDocument document = new XWPFDocument(fileInputStream);// 获取表格对象List<XWPFTable> tables = document.getTables();// 遍历表格(因为一个文档中可能有多个表格)for (XWPFTable table : tables) {List<XWPFTableRow> rows = table.getRows();// 遍历所有的行for (XWPFTableRow row : rows) {List<XWPFTableCell> cells = row.getTableCells();// 遍历所有的单元格for (XWPFTableCell cell : cells) {System.out.println("开始读取表格...");// 获取内容String text = cell.getText();System.out.println("单元格中的内容是:" + text);}}}System.out.println("表格读取完毕");fileInputStream.close();}
}

 

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

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

相关文章

数据库:如何取消mysql的密码

因为调试MySQL数据接口&#xff0c;总是需要输入密码很烦&#xff0c;所以决定取消mysql的root密码&#xff0c; 网上推荐的有两种方法&#xff1a; 1、mysql命令 SET PASSWORD FOR rootlocalhostPASSWORD(); 2、运行 mysqladmin 命令 mysqladmin -u root -p password …

逼格满满,推荐一个高效测试用例工具:XMind2TestCase !

一、背景 软件测试的核心是什么&#xff1f;毫无疑问是测试分析和测试用例设计&#xff0c;也是日常测试投入最多时间的工作内容之一。 然而&#xff0c;传统的测试用例设计过程有很多痛点&#xff1a; 1、使用Excel表格进行测试用例设计&#xff0c;虽然成本低&#xff0c;但…

MaxKey 单点登录认证系统——实现登录后自动跳转及分析思路

Maxkey单点登录系统集成业务系统应用之后&#xff0c;登录界面登录之后不会自动跳转业务系统&#xff0c;需要在首页点击相应应用之后&#xff0c;才能实现跳转业务系统&#xff0c;故以下本人提供解决方法和分析思路。 环境配置 本例使用的是CAS协议实现单点登录 Maxkey 服务…

Golang的API项目快速开始

开启一个简单的API服务。 golang的教程网上一大堆&#xff0c;官网也有非常详细的教程&#xff0c;这里不在赘述这些基础语法教程&#xff0c;我们意在快速进入项目开发阶段。 golang好用语法教程传送门&#xff1a; m.runoob.com/go/ 编写第一个API 前提&#xff1a;按照上一…

麒麟操作系统缓存rpm包,制作离线yum源

缓存rpm包&#xff0c;以make为例 mkdir -p /data/yum yumdownloader --resolve --destdir/data/yum make制作离线yum包 yum install createrepo -y cd /data/yum createrepo .写yum配置文件/etc/yum.repos.d/local.repo [local-repo] namelocal-repo baseurlfile:///data/…

python_selenium零基础爬虫学习案例_知网文献信息

案例最终效果说明&#xff1a; 去做这个案例的话是因为看到那个博主的分享&#xff0c;最后通过努力&#xff0c;我基本实现了进行主题、关键词、更新时间的三个筛选条件去获取数据&#xff0c;并且遍历数据将其导出到一个CSV文件中&#xff0c;代码是很简单的&#xff0c;没有…

JUC之CompletableFuture

Future接口理论 Future接口定义了异步任务执行的一些方法&#xff0c;包括异步任务执行结果&#xff0c;异步任务执行是否中断&#xff0c;异步任务是否完毕等。 Future接口常用实现类FutureTask异步任务 FutureTask<String> futureTask new FutureTask<String>…

debian12部署Gitea服务之二——部署git-lfs

Debian安装gitlfs: 先更新下软件包版本 sudo apt update 安装 sudo apt install git-lfs 验证是否安装成功 git lfs version cd到Gitea仓库目录下 cd /mnt/HuHDD/Git/Gitea/Repo/hu/testrepo.git 执行lfs的初始化命令 git lfs install客户机Windows端在官网下载并安装Git-Lfs 再…

Elasticsearch windows开箱即用【记录】

一、准备工作 安装ES之前要在本机安装好JDK&#xff0c;对应的兼容性见官网链接&#xff1a;https://www.elastic.co/cn/support/matrix ES官网链接&#xff1a;https://www.elastic.co/cn/, 我本机安装的是JDK8&#xff0c;测试使用的是7.3.0版本的ES和Kibana。 1、首先去…

iOS Universal Links(通用链接)详细教程

一&#xff1a;Universal Links是用来做什么的&#xff1f; iOS9.0推出的用于应用之间跳转的一种机&#xff0c; 通过一个https的链接启动app。如果手机有安装需要启动的app&#xff0c;可实现无缝跳转。如果没有安装&#xff0c;会打开网页。 实现场景&#xff1a;微信链接无…

Linux中快速搭建RocketMQ测试环境

必要的文件下载 为什么选择RocketMQ | RocketMQ x86_64位JDK下载0jdk/8u391-b13 rocketmq二进制包下载-rocketmq-all-5.1.4-bin-release.zip 编译好的直接可用的dashboard【rocketmq-dashboard-1.0.0.jar】请在文章顶部下载 dashboard配套的配置文件【application.propert…

【2024系统架构设计】 系统架构设计师第二版-通信系统架构设计理论与实践

目录 一 通信系统网络架构 二 网络构建的关键技术 三 网络构建和设计方法 四 案例分析 注:本节内容可作为知识储备,做一个基本的了解即可。

qt-C++笔记之QProcess

qt-C笔记之QProcess code review! 文章目录 qt-C笔记之QProcess零.示例&#xff1a;QProcess来执行不带参数的系统命令ls并打印出结果一.示例&#xff1a;QProcess来执行系统命令ls -l命令并打印出结果说明 二.示例&#xff1a;QProcess来执行系统命令ls -l命令并打印出结果&…

Android14实战:打破音频默认重采样的限制(五十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

spark中Rdd依赖和SparkSQL介绍--学习笔记

1&#xff0c;RDD的依赖 1.1概念 rdd的特性之一 相邻rdd之间存在依赖关系&#xff08;因果关系&#xff09; 窄依赖 每个父RDD的一个Partition最多被子RDD的一个Partition所使用 父rdd和子rdd的分区是一对一&#xff08;多对一&#xff09; 触发窄依赖的算子 map()&…

Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

文章目录 PreCode基础工程启动类切入口事件 发布事件同步 Listener异步Listener增加EnableAsync增加 Async 测试 Pre Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEv…

国内镜像:极速下载编译WebRTC源码(For Android/Linux/IOS)(二十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

LeetCode 232.用栈实现队列(详解) (๑•̌.•๑)

题目描述&#xff1a; 解题思路&#xff1a; 创建两个栈&#xff0c;一个用于入数据&#xff0c;一个用于出数据。分别是pushST和popST; 1.如果是入数据就直接入进pushST 2.如果是出数据&#xff0c;先检查popST中有无数据&#xff0c;如果有数据&#xff0c;就直接出。如果没…

2024年中职网络安全——Windows操作系统渗透测试(Server2105)

Windows操作系统渗透测试 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2105服务器场景操作系统&#xff1a;Windows&#xff08;版本不详&#xff09;&#xff08;封闭靶机&#xff09;需要环境加Q 目录 1.通过本地PC中渗透测试平台Kali对服务器场景进行系统服务…

ubuntu安装mysql(tar.xz)

0:本机Ubuntu的版本为 腾讯云 18.04 1&#xff1a;下载地址 MySQL &#xff1a;&#xff1a; 下载 MySQL 社区服务器 2&#xff1a;上传文件到服务器 3:解压 sudo sumv mysql-8.2.0-linux-glibc2.17-x86_64-minimal.tar.xz /usrtar -xvf mysql-8.2.0-linux-glibc2.17-x86_6…