Android 開発では、POI を使用して、Word レポート テンプレートに従ってレポート ファイルを生成およびエクスポートします (実践的なチュートリアル)

プロジェクトでレポートをエクスポートするために使用する必要がある機能があります。インターネットで長い間検索しましたが、見つかったいくつかのブログは十分に具体的ではありませんでした。継続的な試行の末、ついに成功しました。これはWord テンプレートに基づいて新しいレポートを作成する方法の記録。Word ドキュメントにコンテンツが入力され、Word ドキュメントが指定されたパスにエクスポートされます。(docx形式)

1. まず、次の jar パッケージをインポートする必要があります。
ここに画像の説明を挿入
ダウンロード リンク: https://pan.baidu.com/s/1S88PX1NxXtSsafbm2tW1fw
抽出コード: l4z0

2. これらのコンテンツを build.gradle に追加します。
(1) android{} に追加します。

	packagingOptions{
    
    
        exclude 'META-INF/INDEX.LIST'
    }
    defaultConfig{
    
    
        multiDexEnabled true
    }

(2) 依存関係を追加する{}

	implementation files('libs\\dom4j-1.6.1.jar')
    implementation files('libs\\poi-3.9-20121203.jar')
    implementation files('libs\\poi-ooxml-3.9-20121203.jar')
    implementation files('libs\\poi-ooxml-schemas-3.9-20121203.jar')
    implementation files('libs\\stax-api-1.0.1.jar')
    implementation files('libs\\xmlbeans-2.3.0.jar')

(3) メニューバーの「ファイル」の「プロジェクトをGradleファイルと同期」をクリックします。

3. docx ファイルをテンプレートとして準備する必要があり (表を含めることができます)、置換する必要がある位置に $name$ の形式で文字列を入力すると、入力したいコンテンツに置き換えられます。 。準備ができたら、src/main/ の下にassets という名前のフォルダーを作成し、その中に docx テンプレート ファイルを置きます。
ここに画像の説明を挿入

4. その後、HashMap のキーと値のペアの N グループの作成を開始し、入力するコンテンツを書き込みます。たとえば、次のようになります。

	Map<String, Object> map = new HashMap<String, Object>();
	map.put("$name$", "张三");
	map.put("$sex$", "男");

5. 次に、テンプレート ファイルを取得し、マップを移動して対応するコンテンツをドキュメントに入力し、新しいファイルをエクスポートするパスを選択します。

	InputStream is = context.getAssets().open("模板文件.docx");
	XWPFDocument document = new XWPFDocument(is);
	//读取段落(一般段落,页眉页脚没办法读取)
	List<XWPFParagraph> listParagraphs = document.getParagraphs();
	processParagraphs(listParagraphs, map);

	//读取页脚
	List<XWPFFooter> footerList = document.getFooterList();
	processParagraph(footerList, map);

	//处理表格
	Iterator<XWPFTable> it = document.getTablesIterator();
	while (it.hasNext()) {
    
    //循环操作表格
		XWPFTable table = it.next();
        List<XWPFTableRow> rows = table.getRows();
        for (XWPFTableRow row : rows) {
    
    //取得表格的行
        	List<XWPFTableCell> cells = row.getTableCells();
            for (XWPFTableCell cell : cells) {
    
    //取得单元格
				List<XWPFParagraph> paragraphListTable = cell.getParagraphs();
                processParagraphs(paragraphListTable, map);
			}
		}
	}
	FileOutputStream fopts = new FileOutputStream("/storage/emulated/0/poiTest/Report/测试.docx");
	document.write(fopts);
	if (fopts != null) {
    
    
		fopts.close();
	}

6. このようにして、docs ファイルを指定したパスにエクスポートできます。

おすすめ

転載: blog.csdn.net/qq_35761934/article/details/119781249