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)在dependencies{}中添加

	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)在菜单栏的File中点击Sync Project with Gradle Files。

3、我们要准备一个docx文件作为模板(可以包含表格),在你需要替换的位置输入$name$这种形式的字符串,之后我们会将它替换成你想要填充的内容。准备好后,在src/main/下创建一个文件夹,名称叫assets,将docx模板文件放进去。
在这里插入图片描述

4、之后我们就可以开始创建N组HashMap键值对,将你希望填写的内容写进去,例如:

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

5、然后我们获取模板文件,遍历map将相应的内容填充进文档中,选择新文件要导出的路径:

	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