紧急通缉各路poi3.6高手 如何替换word中的特定字符

toss2000 2011-03-15 09:23:17
正在处理一个需求,有一个word模板,每一段落中都有一些特定字符$value$,我要处理的是把这个$value$替换成具体的数值,然后再输出为word文档,我们选用的是poi3.6,下面是我的部分代码
try
{

OPCPackage pack = POIXMLDocument.openPackage("C:\\workspace\\test.docx");

XWPFDocument doc = new XWPFDocument(pack) ;

Iterator<XWPFParagraph> paragraphIt= doc.getParagraphsIterator();
while (paragraphIt.hasNext())
{
XWPFParagraph paragraph= paragraphIt.next();

if(paragraph.getParagraphText().indexOf("$kvalue$")!=-1)
{
/**替换其中的字符**/
paragraph.getParagraphText().replace("$kvalue$", "AAAAAA");

//问题就在这里替换之后,我如何把这个paragraph重新写回到doc中呢
}

}
FileOutputStream fos = new FileOutputStream("C:\\workspace\\test1.docx");

doc.write(fos);

fos.flush();

fos.close();

因为没有找到把替换文字后的paragraph写回到doc中的api,所以输出的word还是原来的模板样式,就是说$value$没有被替换掉,请高手们指点一二啊
...全文
695 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liubaofengcq2011 2011-12-18
  • 打赏
  • 举报
回复
org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'C:/documenttemplate/111.doc'
toss3000 2011-03-16
  • 打赏
  • 举报
回复
唉,自己解决了,贴出来,大家看看,不知道能否给大家以帮助
try
{

OPCPackage pack = POIXMLDocument.openPackage("C:\\workspace\\test.docx");

XWPFDocument doc = new XWPFDocument(pack) ;

Iterator<XWPFParagraph> paragraphIt= doc.getParagraphsIterator();
while (paragraphIt.hasNext())
{
XWPFParagraph paragraph= paragraphIt.next();

if(paragraph.getParagraphText().indexOf("$kvalue$")!=-1)
{
List<XWPFRun> run=paragraph.getRuns();

for(int i=0;i<run.size();i++)
{
if(run.get(i).getText(run.get(i).getTextPosition())!=null && run.get(i).getText(run.get(i).getTextPosition()).equals("$kvalue$"))
{
/**参数0表示生成的文字是要从哪一个地方开始放置,一开始这里的代码是
* run.get(i).setText("AAAA",run.get(i).getTextPosition());
* 结果AAAA总是添加到要被替换的文字之后,经查看API知道,设置文字从位置0开始
* 就可以把原来的文字全部替换掉了
* */ run.get(i).setText("AAAA",0);
}
}
}

}
FileOutputStream fos = new FileOutputStream("C:\\workspace\\test1.docx");

doc.write(fos);

fos.flush();

fos.close();
toss2000 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bjsuo 的回复:]
$在正则表达式中是特殊字符,没有替换是因为没有匹配上 与api无关

另外3.6对docx格式支持不足,考虑一下新的版本
[/Quote]
谢谢关注,我已经换为了poi3.8,我做了跟踪是可以进行文本替换的,只是我不知道如何把替换后的文本输出word,我查到XWPFParagraph 能获得XWPFRun,但是操作这个XWPFRun输入文本好像还是有些问题,不知道大侠又没有好的办法……
bjsuo 2011-03-15
  • 打赏
  • 举报
回复
$在正则表达式中是特殊字符,没有替换是因为没有匹配上 与api无关

另外3.6对docx格式支持不足,考虑一下新的版本
toss2000 2011-03-15
  • 打赏
  • 举报
回复
同志们伸伸援手吧
toss2000 2011-03-15
  • 打赏
  • 举报
回复
人气不足啊,赶紧提前一下
toss2000 2011-03-15
  • 打赏
  • 举报
回复
在线急等啊
toss2000 2011-03-15
  • 打赏
  • 举报
回复
大牛们都去哪里了,帮俺看看吧

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧