1. 程式人生 > >POI 追加寫入word文件,POI如何寫入word文件(親測有效),POI報錯Fail to save: an error occurs while saving the package

POI 追加寫入word文件,POI如何寫入word文件(親測有效),POI報錯Fail to save: an error occurs while saving the package

一、POI寫入word文件

首先參考W3Shool的教程(上述快速指南)的“Apache POI Word - 文件”一節,對於建立文件和寫入段落都有清晰的闡釋。我不再贅述。但是其寫入段落的方式每次都會覆蓋曾經寫入的內容。那麼經過我探索一番要這麼處理...

二、POI追加寫入word文件

W3SHOOL教程段落覆蓋是因為每次都會重建已經存在的檔案

FileOutputStream out = new FileOutputStream(
   new File("createparagraph.docx"));

所以你需要做的就是儲存檔案的引用,多次使用即可,注意事項也已經註釋好,大家自行閱讀。

public class WebPageHelper {

    private static XWPFDocument document;
    private static FileOutputStream out;
    private static String OUTPATH = "X:/XXXX/XXXXX/XXXX";

    public static File createDoc(String filePath) throws IOException {
        File file = new File(filePath);
        document = new XWPFDocument();    /*document物件可以只建立一次*/
        out = new FileOutputStream(file);
        System.out.println("created successfully");
        return file;                      /*同一個file的引用,要多次使用才不會被覆蓋*/
    }

    public static void writePara(String paraStr, File file) throws IOException {
        /*對於每個new的OutputStream物件,只能被document.write()執行一次儲存操作*/
        /*所以每次寫入新的段落都要新建OutputStream,否則執行第二次會報錯*/
        out = new FileOutputStream(file);    

        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setText(paraStr);       /*run.setText()是預設追加寫入資料的,不用設定什麼*/

        document.write(out);        /*儲存修改*/
        out.close();                /*記得關閉資源*/

        System.out.println("write successful");
    }
}

三、報錯解決

對於每個new的OutputStream物件,只能被document.write()執行一次儲存操作,所以每次寫入新的段落都要新建OutputStream,否則執行第二次會報錯,程式碼見文中。

四、依賴包下載

在maven repository搜尋POI,找一個使用人數多的版本下載即可,也可以自行配置gradle。