提取excel表格参数,提取word章节内容,提取word计算参数,写提取数据到新word特定位置,新word还有很多附加内容,附加内容都在新word模板中。
思路:
- 提取excel数据:使用easyexcel按行提取excel数据,返回map数据(Map<Integer, String>),map数据过滤null值,传入原始数据和过滤null数据到策略模型提取特定内容。因为excel格式的复杂性,有些参数解析只需要有效值,有些参数解析还需要原始值,所以原始值和有效值都要传入策略模型。策略模型带工厂模式,归类excel处理数据,匹配不同的类,不同的类解析不同类型的数据。使用策略模型的好处是,数据解析解耦了,方便修改各个参数的提取方法;其次,策略模型有利于扩展,当新的待提取数据出现,增加新的策略类和策略行为处理,不影响原来的模型。
- 提取word章节内容:在word中插入书签作为分隔符,通过分隔符提取word各章节内容。word需要转为xml格式(代码格式),xml格式下,直接读取xml内容字符串,通过正则表达式匹配出所有的书签分隔符字符串,再通过书签分隔符字符串截取各章节内容,就提取出word的xml格式的各章节内容了。
- 提取word表格参数:首先提取出word的表格,同样,word转为xml格式,通过书签分隔符字符串截取出表格,然后再通过正则表达式匹配出表格参数,这样,就提取出word的xml格式的表格参数了。
- word转xml:使用spire.doc实现doc或docx转xml。
- 写新word:制作新word的ftl模板,设置需要替换内容的占位符,使用freemarker加载ftl模板,并通过map映射赋值占位符,map数据注入结束,导出word文档。如果存在赋值的内容也有数据修改的需求,一种是使用特殊字符(保证只出现一次的字符)进行标记,拿到赋值内容后进行替换;另一种是设置占位符(两层占位符),第一次先把赋值内容映射到freemarker,第二次映射赋值内容中的占位符。