我需要在docx文件中替换cerain单词或短语,并用其他名称保存。我知道我的问题不是unik,我尝试在网络上找到解决方案。但我仍然无法得到我需要的结果。
我找到了两种方法来解决我的任务,但在每种情况下陷入僵局。 1.展开像zip文件一样的docx,用主要内容更改xml并再次打包到存档。但在那次操作之后,我无法在MS Word中打开新的更改的docx。这很奇怪,因为我可以手动执行类似的步骤(没有Java,使用WinRar)并获得正确的结果文件。 那么你能解释一下如何使用Java来存档docx内容以获得正确的文件吗?
我希望能得到帮助。
答案 0 :(得分:2)
我有这个代码。我希望它能帮助您解决问题。有了它,你可以从.docx中读取你会改变的单词。更改此单词并将新段落保存在新文档中。
//WriteDocx.java
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class WriteDocx
{
public static void main(String[] args) throws Exception {
int count = 0;
XWPFDocument document = new XWPFDocument();
XWPFDocument docx = new XWPFDocument(new FileInputStream("Bonjour1.docx"));
XWPFWordExtractor we = new XWPFWordExtractor(docx);
String text = we.getText() ;
if(text.contains("SMS")){
text = text.replace("SMS", "sms");
System.out.println(text);
}
char[] c = text.toCharArray();
for(int i= 0; i < c.length;i++){
if(c[i] == '\n'){
count ++;
}
}
System.out.println(c[0]);
StringTokenizer st = new StringTokenizer(text,"\n");
XWPFParagraph para = document.createParagraph();
para.setAlignment(ParagraphAlignment.CENTER);
XWPFRun run = para.createRun();
run.setBold(true);
run.setFontSize(36);
run.setText("Apache POI works well!");
List<XWPFParagraph>paragraphs = new ArrayList<XWPFParagraph>();
List<XWPFRun>runs = new ArrayList<XWPFRun>();
int k = 0;
for(k=0;k<count+1;k++){
paragraphs.add(document.createParagraph());
}
k=0;
while(st.hasMoreElements()){
paragraphs.get(k).setAlignment(ParagraphAlignment.LEFT);
paragraphs.get(k).setSpacingAfter(0);
paragraphs.get(k).setSpacingBefore(0);
run = paragraphs.get(k).createRun();
run.setText(st.nextElement().toString());
k++;
}
document.write(new FileOutputStream("test2.docx"));
}
}
PS:XWPFDocument docx = new XWPFDocument(new FileInputStream(&#34; Bonjour1.docx&#34;))
你必须改变&#34; Bonjour1.docx&#34;使用文件名来替换某些单词或短语。 我用APACHE POI library 我从这个网站HANDLING MS WORD DOCUMENTS USING APACHE POI
中获取了一些代码答案 1 :(得分:1)