POIを用いたWord文档生成-シンプルな方法

一、はじめに APACHE POIは、ExcelやWordなどの文書を解析、生成するためのJavaライブラリです。本稿では、POIを用いた動的Word文档生成方法について説明します。 二、使用するJava API

  • poi.jar
  • poi-contrib.jar
  • poi-ooxml.jar
  • poi-ooxml-schemas.jar
  • poi-scratchpad.jar

三、使用方法 WordExtractorを用いて、指定した模板ファイルを基盤としたWord文档を生成することができます。 基本的な手順如下:

  1. 指定したDOCファイルへのパスを指定する
  2. 必要なkeyを設定する(本文はglobale keyとして处理します)
  3. replaceText()を用いて、 DOCファイルの内容を代入します
  4. ファイルを生成します

下記にJavaプログラムの例を示します:

package com.seeyon.apps.xxs.utils;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.*;
import org.apache.poi.hwpf.usermodel.Range;

/**
 * @Author: zjt
 * @Date: 2023/10/14 17:06
 * @Version 1.0
 */
public class WordExtract {

    WordExtract wordExtract;
    public static void main(String[] args) {
        Map<String, String> params = new HashMap<>();
        new WordExtract().writeWord("D:\\tykjCodeSpace\\科技厅\\查新报告样式-查新系统用.doc", params);
    }

    // Wordを生成する
    public void writeWord(String path, Map<String, String> params){
        File file = new File(path);
        try{
            InputStream is = new FileInputStream(file);
            HWPFDocument doc = new HWPFDocument(is);
            Range range = doc.getRange();
            range.replaceText("projectName", "测试");
            range.replaceText("principal","孙紫荆");
            range.replaceText("dateOfEntrustment", "2023年10月14");
            range.replaceText("finishDate","2023年10月14");

            range.replaceText("chineseProject","测试");
            range.replaceText("englishProject","test");
            range.replaceText("signature","孙紫荆");
            range.replaceText("phone","17379207188");
            range.replaceText("faxNumber","111111");
            range.replaceText("e-mail","1004748508@qq.com");
            range.replaceText("purpose","科技查新");
            range.replaceText("technical","检查重点");
            range.replaceText("point","111111111111111");
            range.replaceText("clustering","没有");
            range.replaceText("strategy","有");
            range.replaceText("result","通过");
            range.replaceText("conclusion","完美通过");
            range.replaceText("files","无");
            range.replaceText("remark","恭喜通过");
            
            // DOCファイル生成
            OutputStream os = new FileOutputStream("D:\\tykjCodeSpace\\科技厅\\生成文件.doc");
            doc.write(os);
            os.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

生成されたDOCファイルの例:

<!DOCTYPE html>
<html>
<head>
    <title> DOC生成test</title>
</head>
<body>
    <h1> DOC生成test</h1>
    <p> 本文は测试として生成されました。</p>
</body>
</html>

POIは、Word документの生成に際して、text replacementの機能を提供しますが、 picturesの处理には対応fails 합니다。例えば、 DOCXファイル(WordStar format)は_POI対応可能です。WordStarとWord documentのdifferenceが著しいため、 picturesの处理に局限されています。

.poifileは、文字列 replacementに焦点を当てます。 picturesのinsert/deleteはサポートされていません。

したがって、 DOCXファイルを生成する際にはPOIが使用できません。 DOCXに相当するPOIの対応するライブラリが存在するか否かを確認し、必要に応じてalternativeな方法を斟酌することができます。

6月15日 23:10 投稿