宋 陆游
死去元知万事空,
但悲不见九州同。
王师北定中原日,
家祭无忘告乃翁。
背景
Word模板引擎
poi-tl官方网站
该工具提供了详细的教程,几乎涵盖了所有会遇到的模板引擎的情况,我在实际的使用过程中遇到了一些具体的问题,通过给作者少量的donation,加上了作者的微信;作者给予了充分的支持。整体使用体验特别好;
引入依赖
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.2</version>
</dependency>
依赖冲突
引入成功后如果有如下报错,那么说明有依赖冲突,
Caused by: java.lang.NoSuchFieldError: Factory
at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:196)
at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:169)
at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:159)
at com.deepoove.poi.xwpf.NiceXWPFDocument.<init>(NiceXWPFDocument.java:118)
at com.deepoove.poi.xwpf.NiceXWPFDocument.<init>(NiceXWPFDocument.java:114)
at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:178)
我这边是这么解决的,
步骤一:首先在idea上安装了一个Maven Helper
步骤二:在控制台输出的错误日志中跳转到对应的jar包,确认抛出错误的jar包的maven坐标
步骤三:在每一个pom.xml中exclude步骤2中抛出异常的jar包
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.1</version>
<exclusions>
<exclusion>
<artifactId>poi-ooxml</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
</exclusions>
</dependency>
步骤四:再次运行,如果还有问题则反复执行步骤2-3
最后成功运行后有时候会出一个报错,
java.lang.IllegalArgumentException: Unknown configuration property http://javax.xml.XMLConstants/property/accessExternalStylesheet
at net.sf.saxon.Configuration.setConfigurationProperty(Configuration.java:4621)
at net.sf.saxon.s9api.Processor.setConfigurationProperty(Processor.java:352)
at net.sf.saxon.jaxp.SaxonTransformerFactory.setAttribute(SaxonTransformerFactory.java:305)
at org.apache.poi.util.XMLHelper.trySet(XMLHelper.java:283)
at org.apache.poi.util.XMLHelper.getTransformerFactory(XMLHelper.java:224)
at org.apache.poi.util.XMLHelper.newTransformer(XMLHelper.java:230)
at org.apache.poi.openxml4j.opc.StreamHelper.saveXmlInStream(StreamHelper.java:56)
at org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.saveImpl(ZipContentTypeManager.java:68)
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.save(ContentTypeManager.java:450)
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:563)
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1490)
at org.apache.poi.ooxml.POIXMLDocument.write(POIXMLDocument.java:227)
at com.deepoove.poi.XWPFTemplate.write(XWPFTemplate.java:235)
at com.deepoove.poi.XWPFTemplate.writeAndClose(XWPFTemplate.java:246)
该错误并不影响最后正确的文件输出,相应的解决方案可参考,issues 708,主要参考作者和PJ Fanning的回答,这个人也是poi的作者。
什么是依赖冲突
Excel模板引擎
在使用体验中,easyexcel相对来说比较有
方案 | 官网 | 优点 | 缺点 |
---|---|---|---|
Apache POI | 链接 | ||
JXLS | 链接 | ||
easyexcel | https://easyexcel.opensource.alibaba.com/ |