Замена переменных в шаблоне документа word на java
Я хочу загрузить документ шаблона word, чтобы добавить содержимое и сохранить как новый документ. Я работаю над этим .doc-файл.
после долгих исследований я нашел решения только для docx:
http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j
http://www.sambhashanam.com/mail-merge-in-java-for-microsoft-word-document-part-i/
поэтому я хочу заменить любую переменную, написанную в этом формате:$VAR
по его значению.
Могу ли я сделать это со скоростью или Apache-poi, что является лучшим решением для него.
Любая помощь будет оценена.
2 ответов
Да, вы можете сделать это с помощью Apache-POI. Имена переменных должны быть уникальными. См. следующий код
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class HWPFTest {
public static void main(String[] args){
String filePath = "F:\Sample.doc";
POIFSFileSystem fs = null;
try {
fs = new POIFSFileSystem(new FileInputStream(filePath));
HWPFDocument doc = new HWPFDocument(fs);
doc = replaceText(doc, "$VAR", "MyValue1");
saveWord(filePath, doc);
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
}
private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText){
Range r1 = doc.getRange();
for (int i = 0; i < r1.numSections(); ++i ) {
Section s = r1.getSection(i);
for (int x = 0; x < s.numParagraphs(); x++) {
Paragraph p = s.getParagraph(x);
for (int z = 0; z < p.numCharacterRuns(); z++) {
CharacterRun run = p.getCharacterRun(z);
String text = run.text();
if(text.contains(findText)) {
run.replaceText(findText, replaceText);
}
}
}
}
return doc;
}
private static void saveWord(String filePath, HWPFDocument doc) throws FileNotFoundException, IOException{
FileOutputStream out = null;
try{
out = new FileOutputStream(filePath);
doc.write(out);
}
finally{
out.close();
}
}
}
Викрант,
фрагмент кода приведен выше, и для работы нам нужна jar, упомянутая выше. Вместе с этой банкой используйте / загрузите poi-3.5-FINAL.и банку тоже.
надеюсь, это ответит на ваш вопрос.