之前一直以为Word作为微软的龙头产品,其生态一定极为封闭,因此在文档生成方面一直都使用的Latex。然而使用Word毕竟是大多数人的习惯,要将Latex文档生成应用到与使用者有交互的场景时总遇到不少问题,于是产生了是不是可以用程序读取和生成Word的想法。
没想到经过一番搜索和折腾,发现的确有几个非常给力的".NET"库能在用户不装Word的情况下做到这件事。本人详细研究和使用了其中比较有代表性的两个,在本篇文章中将进行总体简介,之后在后续的系列文章中将详细介绍其操作。
DocX库
DocX库是"Xceed Words for .NET"的开源版本,github的地址在这。该库是由爱尔兰的"Cathal Coffey"博士生开发由"Przemyslaw Klys"维护的。在1.5.0版本后由"Xceed."公司维护,可以在非商业化场景下使用。
本人用该库完成了一个项目的编写,最大的感受就是其效率非常高,完成一篇篇幅不小的Word文档生成就是瞬间的事情,而且对于比较简单的操作可以通过开源代码里面的sample示例习得。因此如果对于没有啥特殊要求的Word生成场景来说用该库足矣。
该库的不足之处在于功能不是特别完善,比如插入三线表本人就弄了半天,表的线宽设置参数有些是无效的等等。而且如果不用模板,生成的文档的一些默认设置比较非主流。此外该库最大的功能缺失还在于它只能做文档生成,文档读取方面则无能为力。
Spire.Doc库
不同于DocX库,Spire.Doc库是一个商用的Word读取生成库,因此也是闭源的,官网在此。不过接受了不能研究其源代码的设定后,用它进行Word的操作相对来说会比DocX库要完备一点。
该库分为两个版本,商业版本"Spire.Doc"在没有付费的情况下生成的文档第一页会有一行版权声明。而免费的"Free Spire.Doc"完全免费并没有任何警告信息,但是免费版有篇幅限制。在加载或操作Word文档时,要求Word文档不超过500个段落,25个表格。同时将Word文档转换为PDF和XPS格式时,仅支持转换前3页。除了上面的不同外,经过本人测试,其商业版本在生成文档的效率上要高于免费版本,在本人用其生成包括目录的文档时,免费版本用了20s左右的情况下,商业版本只用了10s左右,当然这有可能是免费版本的版本号较低还没最新商业版本优化的好的缘故。
该库的优点是功能相对完善,毕竟是商业产品,库的完成度和资料都不是DocX库可比的。因此如果要进行Word的读写操作,而只希望用一个库的情况下,该库无疑是最佳的选择。而其缺点就是免费版的效率低,因此在一些场景下用该库又觉得有点别扭。
而如果能接受用多个库的情况下,本人觉得最好的解决方案是将源文档拆成不要超过"Free Spire.Doc"限制的文档大小,然后使用其进行读取,而写入的部分使用DocX库进行。
OpenXML库
OpenXml库是由微软维护的一个开源的Office文档读写库,github的地址在这。
由于是微软自己维护的库,因此它是本文介绍的Word自动化读写库中最靠谱的存在。其他类似的库可以理解为是它的二次封装,虽然用起来会方便一点,然而对于愿意折腾的人来说,应该毫不犹豫选择这个库。
另外,其提供的office文档查看工具(OpenXMLSDKTool)也非常赞,可以直接看到文档的构成和特定格式的描述代码,是开发相关程序的一大利器: