我编写了java程序来从excel读取数据,并用Apache POI替换word文档中的相同文件。问题是poi只读取单词而不是句子:
XWPFDocument doc = new XWPFDocument(OPCPackage.open("input.docx"));
for (XWPFParagraph p : doc.getParagraphs()) {
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
for (XWPFRun r : runs) {
String text = r.getText(0);
if (text != null && text.contains("needle")) {
text = text.replace("needle", "haystack");
r.setText(text, 0);
}
}
}
}
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
for (XWPFRun r : p.getRuns()) {
String text = r.getText(0);
if (text.contains("needle")) {
text = text.replace("needle", "haystack");
r.setText(text);
}
}
}
}
}
}
doc.write(new FileOutputStream("output.docx"));
答案 0 :(得分:3)
Word和Excel都没有句子的概念。因此,POI也不是。但是在Excel中,你必须在单元格中设置单个单词的样式。用Word不正确。每次加粗单词,插入内容,或更改字母或更改字体时,Word都会将其分成单独的运行。事实上,你可能会在个别运行中得到一堆字母。要做你想要的,你需要将段落中的所有运行连接在一起,并为句子分隔符的任何内容解析它,然后省略错误的分隔符,例如缩写末尾的句点。一旦你开始思考它就不容易,事实上,它是非常依赖于语言的。例如,英语句子通常以句点.
,感叹号!
或问题?
结尾,但句点也用于终止缩写,有时句子终止符后跟一个引用"
。英语句子没有开头字符,但西班牙语中的一些句子有¡
或¿
。