简介
Apache POI 是Java 领域中可以操作World,Excel,PPT文件的类库,可以用于生成报表,数据处理等。注意:Apache POI 从4.0.1版本开始,需要JDK 8 或更高版本支持。
依赖导入
<!--poi 类 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<!--word工具类-->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.9.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
<!--html渲染插件 注意0.4.2版本需要匹配jsoup的1.15.4版本-->
<dependency>
<groupId>io.github.draco1023</groupId>
<artifactId>poi-tl-ext</artifactId>
<version>0.4.2</version>
<exclusions>
<exclusion>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.4</version>
</dependency>
<!--样式依赖-->
<dependency>
<groupId>org.w3c.css</groupId>
<artifactId>sac</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cssparser</groupId>
<artifactId>cssparser</artifactId>
<version>0.9.29</version>
</dependency>
富文本导出
在导出内容中包含有html标签的富文本,或者导出的数据是动态的可以组合为html标签富文本格式导出。以下是html渲染代码。
try {
// 富文本内容,这里读取的本地文件(文件内容可自定义,只要是html标签格式富文本都可以),文件见后面
String filePath = "D:\\html.txt";
FileInputStream fin = new FileInputStream(filePath);
InputStreamReader reader = new InputStreamReader(fin);
BufferedReader buffReader = new BufferedReader(reader);
StringBuilder richTextHtml = new StringBuilder();
String strTmp = "";
while ((strTmp = buffReader.readLine()) != null) {
richTextHtml.append(strTmp);
}
buffReader.close();
// HTML内容
String richTextHtmlString = richTextHtml.toString();
// html渲染插件
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
Configure configure = Configure.builder()
// 注册html解析插件,只有注册的key才会解析html富文本。
.bind("content", htmlRenderPolicy)
.build();
// 映射数据Map
Map<String, Object> data = new HashMap<>();
data.put("topic","标题");
data.put("content", content2Html(richTextHtmlString));
// 读取模板文件,并渲染数据。test_template.docx模板文件 这里放在resources下面,模板内容可以自定义,与映射字段对应上即可。
XWPFTemplate template = XWPFTemplate.compile(Objects.requireNonNull(getResourceInputStream("/test_template.docx")), configure).render(data);
// 写入文件
template.writeToFile("D:\\test_template_return.docx");
template.close();
} catch (Exception e) {
e.printStackTrace();
}
样例代码中的富文本文件html.txt
<table>
<tr>
<td>html富文本</td>
</tr>
<tr>
<td>importance</td>
</tr>
<tr>
<td>html富文本</td>
</tr>
<tr>
<td>worry</td>
</tr>
</table>
样例代码中的模板文档test_template.docx,注意需要替换的内容映射参数使用{ {}}阔起来。模板中ha还包含两张图片、空心饼图和柱状图在下一章用。</