导出 Word 文件其实与 Springboot 没有多大关系,这都是 Apache 子项目 POI
的功劳。下面简单介绍一下在 Springboot 项目中如何使用 POI 导出 Word 文件。
-
关键的依赖是
org.apache.poi poi 3.15 org.apache.poi poi-scratchpad 3.15poi
的 jar 包: -
创建 Word 模板文件
创建一个 Word 文件,命名为:template.doc
,内容如图:
-
编写导出程序
private void build(File tmpFile,Map<String, String> contentMap, String exportFile) throws Exception {
FileInputStream tempFileInputStream = new FileInputStream(tmpFile);
HWPFDocument document = new HWPFDocument(tempFileInputStream);
// 读取文本内容
Range bodyRange = document.getRange();
// 替换内容
for (Map.Entry<String, String> entry : contentMap.entrySet()) {
bodyRange.replaceText("${" + entry.getKey() + "}", entry.getValue());
}//导出到文件
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
document.write(byteArrayOutputStream);
OutputStream outputStream = new FileOutputStream(exportFile);
outputStream.write(byteArrayOutputStream.toByteArray());
outputStream.close();
}参数说明:
tmpFile
: 模板文件
contentMap
:数据模型,包含具体数据的 map 对象
exportFile
:需要保存导出文件的路径
-
导出文件测试方法
@Test
public void testExportWord() throws Exception {String tmpFile = "D:/temp/template.doc"; String expFile = "D:/temp/result.doc"; Map<String, String> datas = new HashMap<String, String>(); datas.put("title", "标题部份"); datas.put("content", "这里是内容,测试使用POI导出到Word的内容!"); datas.put("author", "知识林"); datas.put("url", "http://www.zslin.com"); build(new File(tmpFile), datas, expFile);
}
**注意:**这里的模板文件是放到D:/temp
目录下,在实际项目应用中这些模板文件都是需要放在项目的 classpath 中的,这样的做法很明显不能满足需求。 -
模板文件中
classpath
中的导出文件测试方法@Test
public void testExportWord2() throws Exception {
String tmpFile = "classpath:template.doc";
String expFile = "D:/temp/result.doc";
Map datas = new HashMap();
datas.put("title", "标题部份");
datas.put("content", "这里是内容,测试使用 POI 导出到 Word 的内容!");
datas.put("author", "知识林");
datas.put("url", "http://www.zslin.com");build(ResourceUtils.getFile(tmpFile), datas, expFile);
}
**注意:**使用 ResourceUtils
工具类的 getFile
方法即可读取 classpath
中的文件,所以这里读模板文件的方法是:ResourceUtils.getFile("classpath:template.doc")
。
以上两种方法导出的文件都放在:D:/temp/result.doc
文件中,具体的内容如下图:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于