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

相关文章

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.