POI替换word中的指定文字(包含表格,表格中有回车)

2024-05-11 02:08

本文主要是介绍POI替换word中的指定文字(包含表格,表格中有回车),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网上可以找到很多POI替换Word中指定文字的代码,然而基本上都没有对文档中的表格中包含的段落(回车)进行处理。自己写了,代码记录如下:

/**
*
*@templetStream 文档的输入流
*@data 要替换的key,value的map,将文档中的@key@替换为value值
*
**/
public byte[] genWord2003ByTemplet(InputStream templetStream,Map<String, String> data) throws IOException {XWPFDocument doc = new XWPFDocument(templetStream);// 替换段落中的指定文字Iterator<XWPFParagraph> itPara = doc.getParagraphsIterator();while (itPara.hasNext()) {XWPFParagraph paragraph = (XWPFParagraph) itPara.next();List<XWPFRun> runs = paragraph.getRuns();String beforeOneparaString="";for (int i=0; runs!=null&&i<runs.size(); i++) {String oneparaString = runs.get(i).getText(runs.get(i).getTextPosition());for (Map.Entry<String, String> entry : data.entrySet()) {if(oneparaString != null){if(oneparaString.contains(String.format("@%s@", entry.getKey()))){oneparaString = oneparaString.replace(String.format("@%s@", entry.getKey()), Strings.nullToEmpty(entry.getValue()));}else if(oneparaString.contains(entry.getKey()) && beforeOneparaString.endsWith("@")){oneparaString = oneparaString.replace(entry.getKey(), Strings.nullToEmpty(entry.getValue()));runs.get(i-1).setText(beforeOneparaString.substring(0,beforeOneparaString.length()-1), 0);if(i+1<runs.size()){String afterOneparaString=runs.get(i+1).getText(runs.get(i+1).getTextPosition());runs.get(i+1).setText(afterOneparaString.substring(0,beforeOneparaString.length()-1), 0);}}}}runs.get(i).setText(oneparaString, 0);beforeOneparaString=oneparaString;}}// 替换表格中的指定文字  Iterator<XWPFTable> itTable = doc.getTablesIterator();  while (itTable.hasNext()) {  XWPFTable table = (XWPFTable) itTable.next();  int rcount = table.getNumberOfRows();  for (int i = 0; i < rcount; i++) {  XWPFTableRow row = table.getRow(i);  List<XWPFTableCell> cells = row.getTableCells();  for (XWPFTableCell cell : cells) {  //表格中处理段落(回车)List<XWPFParagraph> cellParList= cell.getParagraphs();for(int p=0; cellParList!=null&&p<cellParList.size();p++){ //每个格子循环List<XWPFRun> runs = cellParList.get(p).getRuns(); //每个格子的内容都要单独处理String beforeOneparaString="";for (int q = 0; runs!=null&&q<runs.size(); q++) {String oneparaString = runs.get(q).getText(runs.get(q).getTextPosition());for (Map.Entry<String, String> entry : data.entrySet()) {if(oneparaString!=null){if(oneparaString.contains(String.format("@%s@", entry.getKey()))){oneparaString = oneparaString.replace(String.format("@%s@", entry.getKey()), Strings.nullToEmpty(entry.getValue()));}else if(oneparaString.contains(entry.getKey()) && beforeOneparaString.endsWith("@")){oneparaString = oneparaString.replace(entry.getKey(), Strings.nullToEmpty(entry.getValue()));runs.get(q-1).setText(beforeOneparaString.substring(0,beforeOneparaString.length()-1), 0);if(q+1<runs.size()){String afterOneparaString=runs.get(q+1).getText(runs.get(q+1).getTextPosition());runs.get(q+1).setText(afterOneparaString.substring(0,beforeOneparaString.length()-1), 0);}}}}runs.get(q).setText(oneparaString, 0);beforeOneparaString=oneparaString;}} }  }  }ByteArrayOutputStream os = new ByteArrayOutputStream();if (doc != null) {doc.write(os);}byte[] b = os.toByteArray();Closeables.close(templetStream, true);Closeables.close(os, true);return b;}

这篇关于POI替换word中的指定文字(包含表格,表格中有回车)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格