案例
利用 POI
进行 word
模板替换已经有很成熟的方案了,开源的工具就有 easypoi,以及最近发现的工具 poi-tl,都是模板替换,用法大同小异。
团队内部现在总结发现,用 easypoi
进行 excel
导入导出,模板替换比较方便,但是在 word
方面目前来看 poi-tl
,优势更大,因为其既拥有 easypoi
的优势,又弥补了一些不足,比如图片的环绕,可以通过其插件解决,而且也提供自定义插件支持,可以更灵活。
但是最近有个需求,在word
模板中有图表的存在,现存的两个工具都无法满足,只能支持图片插入。因此决定通过自定义其引用插件
,来满足需求。
在自定义插件时,发现使用poi-tl
还是很方便和简单的,麻烦的是自己去操作图表,由于自己太菜以及对 poi
的认识还严重不足,走了很多路,所以这里记录下。
引用
学习 poi
完全是瞎撞,也不知道各位大佬是如何学习的,为了解决图表问题,能用的资料太少了,这里就贴一些:
- java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换、更新内置Excel数据、更新插入的文本框内容、合并表格单元格
- 官方 javaDoc
- 官方 示例源码
这里感谢下 我们都有 博主提供的示例源码。
使用记录
目前只是研究了下折线图,其他的还没来的及。
获取图表,定位模板图表
我们都有 博主的思路是通过,图表的编辑数据第一行第一列的交叉格子(org.apache.poi.xssf.usermodel.XSSFCell
),在这里输入标识符来定位,其方法提供是getZeroData
我将方法稍微调整了下,思路是一样的,直接贴代码:
// 获取所有图表
List<XWPFChart> charts = document.getCharts();
for (XWPFChart chart : charts) {
XSSFWorkbook workbook = chart.getWorkbook();
XSSFSheet sheet1 = workbook.getSheetAt(0);
XSSFCell cell = sheet1.getRow(0).getCell(0);
String firstCellValue = cell.getStringCellValue();
// optionalText() 为标识符获取方法
if (StrUtil.equals(firstCellValue, optionalText())) {
findCharts.add(chart);
}
}
定位代码后,就是操作了
渲染数据
数据结构
渲染数据之前是填入数据,我们都有 博主提供的数据结构,个人觉得太凌乱了,所以我总结了一下,定义如下
@Data
public class LineChartRenderData {
/**
* 图名
*/
private String title;
/**
* 折线
*/
private List<LineData> lines;
/**
* 横坐标
*/