【问题标题】:How to speed up generation of Word files from C#?如何加快从 C# 生成 Word 文件的速度?
【发布时间】:2016-11-24 21:28:22
【问题描述】:

我正在开发一个生成相对大量 Word 输出的应用程序。目前,我们正在使用 Word 互操作服务来创建文档,但速度很慢,尤其是在较旧的(2007 年之前)版本的 Office 中。我们希望加快生成速度。

我还没有做很多分析,但我很确定问题在于我们正在进行大量的 COM 调用。我希望分析会产生比其他调用慢的子集,但我的直觉告诉我,这可能是 COM 开销(或 Word 互操作开销)的问题,而不仅仅是一些慢速调用。

此外,该产品可以生成 HTML 输出,并且该过程 (a) 非常快,并且 (b) 使用几乎相同的代码路径,只是针对特定于 HTML 的功能片段使用不同的子类。所以我很确定我们的算法从根本上来说并不慢。

所以...我正在寻找有关加速 Word 文件生成的替代方法的建议。

我们不能只是将生成的 HTML 文件重命名为 .doc,也不能生成 RTF——在这两种情况下,重要的格式信息都会丢失,并且在 RTF 情况下,内联图形无法正常工作.

我们正在评估的一种方法是以编程方式从一个模板生成和打开一个 Word 文件(通过互操作),该模板具有一个知道如何使用平面文件并创建必要输出的宏。我们对有关该方法的反馈以及任何其他加快速度的想法感兴趣。

【问题讨论】:

    标签: c# office-interop


    【解决方案1】:

    如果您负担得起,我会推荐 Aspose.Words 产品。速度非常快,无需安装 Word。

    而且它比办公室互操作更容易使用。

    【讨论】:

    • 我很想使用它,但价格标签对于我们的特殊需求来说太高了——我们的应用程序是桌面应用程序,因此每位开发人员大约需要 2500 美元。
    • 是的,我知道你的意思。要获得如此昂贵的工具,需要花费很多力气。我写的一段代码花了我大约 4 个小时来完成,我怀疑我需要一周的时间才能让一切正常工作并且速度很慢。我觉得我们的钱物有所值。
    【解决方案2】:

    您的宏方法正是我们加快慢速 excel 互操作的方式(我认为使用 2003 版)。

    我们发现(至少在 excel 中)大部分缓慢是由于通过互操作重复的单个调用造成的。我们开始捆绑命令(即格式化大范围,然后根据需要更改特定单元格,而不是单独格式化每个单元格),并在逻辑上转向宏。

    我认为宏 + 模板的方法会很乐意翻译。

    【讨论】:

    • 酷...你是如何处理从 .NET 应用程序到宏的数据通信的?
    • 从内存中,我们尝试以最少的互操作调用次数推送数据。也许如果你运气好的话,你可以把它推到一个块中,让你的宏解析出来并做它的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2011-07-07
    • 1970-01-01
    • 2019-07-20
    • 2011-12-15
    • 2023-04-05
    • 2017-02-11
    相关资源
    最近更新 更多