【问题标题】:Manipulating Word documents on server without Office installed (ASP.NET)在未安装 Office 的服务器上操作 Word 文档 (ASP.NET)
【发布时间】:2017-02-23 22:04:52
【问题描述】:

我正在编写将 MS Word 转换为 HTML 系统的代码。在谷歌搜索大约半分钟后,我能够找到完全符合我需要的代码。现在.. 它可以在 ASP.NET 开发服务器上脱机工作,但是当我将文件上传到我的服务器上时它就无法工作了。

我阅读了几篇帖子,问题似乎是因为服务器上没有安装 MS Office。现在,我不确定它是否有,我仍在等待来自好人@hosting 的电子邮件(但我认为它没有安装),但我的问题是......

在没有安装 MS Office 的情况下,有什么方法可以让它工作吗? 我正在使用 Microsoft.Office.Interop.Word 版本。 12. / ASP 3.5 / C#,我得到的错误是

无法加载文件或程序集 'Microsoft.Office.Interop.Word, 版本=12.0.0.0,文化=中性, PublicKeyToken=71e9bce111e9429c' 或 它的依赖项之一。

感谢您的宝贵时间!

【问题讨论】:

  • 你打算用word文档做什么,编辑内容?
  • 只是想补充一点,(a) MS 不推荐/不支持将服务器端 Office 用于此类目的,以及 (b) 建议将 OOXML 用于上述目的。见support.microsoft.com/kb/257757。使用您正在寻找的第三方解决方案可能会更好。

标签: c# asp.net ms-word


【解决方案1】:

Interop 库本身并不是一个“工作”库,它只是 .NET 程序的 winword.exe 的包装器,因此如果您不安装或使用 Microsoft Word,则使用此库没有任何意义。

相反,您需要找到一个允许操作 Word 文档的库。如果您可以将文档限制为新格式(docx),那么这将是一项非常容易的任务,例如使用OOXML SDK(也由 Stilgar 提议)。但也有旧格式的库。

更新:我不得不承认,虽然我确信我之前搜索并找到了一些旧文档格式的库,但我再也找不到那些了,可能是因为结果列表是“被 docx 的许多优惠宠坏了。说清楚:

如果您有能力坚持使用 docx(2007 或更高版本)格式,则应该这样做。 Office Open XML 是(或多或少)基于 ZIP 和 XML 的开放标准,许多工具已经存在并将在未来开发。现在对旧格式的支持要少得多。

如果您也必须使用旧格式,那么 Aspose(由 Uwe 提议)是我找到的唯一库。

【讨论】:

  • 我最近为一家律师事务所做的一个项目对这个主题做了很多研究。 Aspose 是为数不多的支持旧 DOC 格式的软件包之一,即便如此,它们所支持的内容也存在一些限制(尤其是关于邮件合并字段)。 OOXML 库非常适合 DOCX 文件,并且不需要 Office,但是它们对于进行任何类型的重大文档更改都非常具有挑战性。不过,使用它们从头开始构建文档非常容易。
【解决方案2】:

我认为OOXML SDK 可能包含一些东西,但它只适用于 docx 而不适用于旧 doc。

对于旧格式,我也对无需使用自动化 API 的廉价且简单的方式来支持它们感兴趣

【讨论】:

    【解决方案3】:
    1. 你应该更好地解释你想要达到的结果是什么
    2. 不行,MS Office interop 需要在服务器上安装 MS Word
    3. 根据您的需要,您应该找到最好的 3rd 方库(我建议 OpenXml.WordprocessingDocument),但必须重写代码。

    【讨论】:

      【解决方案4】:

      你可以使用Code7248.word_reader.dll

      下面是Code7248.word_reader.dll的使用示例代码

      在您的项目中添加对此 DLL 的引用并复制以下代码。

      using System;
      using System.Collections.Generic;
      using System.Text;
      //add extra namespaces
      using Code7248.word_reader;
      
      
      namespace testWordRead
      {
          class Program
          {
              private void readFileContent(string path)
              {
                  TextExtractor extractor = new TextExtractor(path);
                  string text = extractor.ExtractText();
                  Console.WriteLine(text);
              }
              static void Main(string[] args)
              {
                  Program cs = new Program();
                  string path = "D:\Test\testdoc1.docx";
                  cs.readFileContent(path);
                  Console.ReadLine();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多