Springboot 之 POI导出Word文件

来源:互联网 发布:江苏清华紫光软件集团 编辑:程序博客网 时间:2024/05/18 09:52

本文章来自【知识林】

导出Word文件其实与Springboot没有多大关系,这都是Apache子项目POI的功劳。下面简单介绍一下在Springboot项目中如何使用POI导出Word文件。

  • pom.xml文件
<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.4.0.RELEASE</version>    <relativePath/> <!-- lookup parent from repository --></parent><dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.apache.poi</groupId>        <artifactId>poi</artifactId>        <version>3.15</version>    </dependency>    <dependency>        <groupId>org.apache.poi</groupId>        <artifactId>poi-scratchpad</artifactId>        <version>3.15</version>    </dependency></dependencies>

关键的依赖是poi的jar包:

<dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi</artifactId>    <version>3.15</version></dependency><dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi-scratchpad</artifactId>    <version>3.15</version></dependency>
  • 创建Word模板文件

创建一个Word文件,命名为:template.doc,内容如图:

POI导出Word文件的模板

  • 编写导出程序
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:需要保存导出文件的路径

  • 导出文件测试方法
@Testpublic 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中的导出文件测试方法
@Testpublic void testExportWord2() throws Exception {    String tmpFile = "classpath: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(ResourceUtils.getFile(tmpFile), datas, expFile);}

注意: 使用ResourceUtils工具类的getFile方法即可读取classpath中的文件,所以这里读模板文件的方法是:ResourceUtils.getFile("classpath:template.doc")

以上两种方法导出的文件都放在:D:/temp/result.doc文件中,具体的内容如下图:

POI导出Word的结果图片

示例代码:https://github.com/zsl131/spring-boot-test/tree/master/study14

本文章来自【知识林】

1 0