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

相关文章

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

如何利用Python实现给Excel表格截图

《如何利用Python实现给Excel表格截图》这篇文章主要为大家详细介绍了如何利用Python实现给Excel表格截图功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 我搜索了网络上的方案,感觉把 Excel 表格转换为 html 再用 platwright 截图是比China编程较顺

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一