Zamiana zmiennych w szablonie dokumentu programu word na Javę

Chcę załadować dokument szablonu word, aby dodać zawartość do i zapisać jako nowy dokument. Pracuję nad tym .plik doc.

Po długich badaniach znalazłem tylko rozwiązania dla docx :

Http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j{[7]

Http://www.sambhashanam.com/mail-merge-in-java-for-microsoft-word-document-part-i/

Chcę więc zastąpić dowolną zmienną zapisaną w tym formacie: $VAR przez jej wartość. Czy Mogę to zrobić z velocity lub Apache-poi, jakie jest najlepsze rozwiązanie dla niego. Każda pomoc będzie mile widziana.

Author: Drunix, 2014-03-24

2 answers

Tak, możesz to zrobić używając Apache-POI. Nazwy zmiennych muszą być unikalne. Zobacz następujący kod

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();
        }
    }
}
 23
Author: Liquidpie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-29 22:56:05

Vikrant,

Fragment kodu podany jest powyżej i do działania potrzebny jest wspomniany wcześniej jar. Wraz z tym Jar, użyj / Pobierz poi-3.5-FINAL.słoik też.

Mam nadzieję, że to odpowie na twoje pytanie.

 -5
Author: SandeepManda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 06:12:23