我想用POI 替换word2007 中的:<%8000011%> 变成:AAAAA
XWPFDocument document=new XWPFDocument(POIXMLDocument.openPackage("C:\\Users\\whx\\Desktop\\whx.docx"));
Iterator<XWPFParagraph> itPara =document.getParagraphsIterator();
while(itPara.hasNext()){
XWPFParagraph paragraph =itPara.next();
List<XWPFRun> runs=paragraph.getRuns();
for(int i = 0; i < runs.size(); i++){
XWPFRun run=runs.get(i);
String oneParagString = runs.get(i).getText(runs.get(i).getTextPosition());
String oneParagString=run.getText(0);
if(oneParagString!=null){
for(Map.Entry<String, String> entry:map.entrySet()){
if(oneParagString!=null&&oneParagString.contains(entry.getKey())){
oneParagString=oneParagString.replace(entry.getKey(), entry.getValue());
}
}
run.setText(oneParagString, 0);
}
}
}
如果我用上面加粗的第一行代码:报错 数组下标越界
String oneParagString = runs.get(i).getText(runs.get(i).getTextPosition());
Exception in thread "main" java.lang.IndexOutOfBoundsException
at org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTRImpl.getTArray(Unknown Source)
at org.apache.poi.xwpf.usermodel.XWPFRun.getText(XWPFRun.java:281)
at com.axjy.entity.Test2.main(Test2.java:41)
如果我用上面加粗的第二行代码的话:
String oneParagString=run.getText(0);
在控制台打印出来的oneParagString 的内容格式会改变
比如:word文档中的内容: 您好,<%8000011%>,欢迎您! 本来在一行的,展示出来的却是换行后的数据。
您好,
<%
8000011
%>,
欢迎您!
这样的话,根本找不到<%8000011%> ,所以就替换不成功。
请问一下:那个高手知道 上面两个方法的区别是什么?
用第一个方法,报错的原因是什么?
用第二个方法的话,为什么打印的内容自动换行?
我只是想替换原来word中的部分内容,其他的标题,字体,格式都不能改变的。
还有别的方法么?
急等高手指点。我的qq号1247726124, 现在卡在这里了。一直动不了了。路过的各位大神,指点一量句话把。。。。。。。。。word中选中表达式,设置为宋体试试
xdoc做类似的功能,可以关注一下: http://www.xdocin.com/cmyg.xdoc?_format=docx
好像不行啊。这样的话,还是那样自动换行。<%80000011%>现在主要是run.getText(0);和run.getText(run.getTextPosiong());这两个方法那个是正确的?run.getText(0);这个方法对吗?各位大神,有没有别的方法可以替换word2007 。docx文件的插件?
告诉我一下;让我也学习一下。
可以的话,我想用别的方法,来试试。
如果是docx,你要暴力一点,直接用zip打开文件找到document.xml,然后直接啪啦啪啦的把里面的转换,当然我就说说,因为他的run和里面内容是分开的话就没办法匹配到你说的这个内容。因为会涉及到文字style问题,所以其实你这样解析真心不是很好做。反正我是没有想到一个很块的版办法就是了。如果我会做可能也和你差不多,首先解析所有paragraph,拿出里面所有的run(paragraph下的内容也分为很多种啊hyperlink也是run的内容),然后慢慢判断,没用过POI,对其不是非常了解,只是知道Word07的XML文件结构。试试合并run有创意。我试试看。谢谢拉。。。请问一下。有没有方法可以在XWPFParagraphparagraph=itPara.next();
后面替换呢?因为我打印出来的paragraph.toString();中的<%8000011%>是没有换行的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。