在未安装Office的服务器上操作Word文档(ASP.NET)

21
我正在编写一段代码以创建一个将 MS Word 转换为 HTML 的系统。通过大约半分钟的谷歌,我找到了完全符合我的需求的代码。现在... 它可以在 ASP.NET 开发服务器离线使用,但当我上传文件到我的服务器时,它就无法正常工作。
我阅读了几篇帖子,问题似乎是因为该服务器未安装MS Office。现在,我不确定它是否已安装,我仍在等待主机方面的邮件(但我认为没有安装),我的问题是...
是否有任何方法可以使其在没有安装 MS Office 的情况下正常工作? 我使用 Microsoft.Office.Interop.Word ver. 12. / ASP 3.5 / C#,得到的错误信息是
“无法加载文件或程序集 'Microsoft.Office.Interop.Word,版本=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c' 或其某个依赖项。”
感谢您的时间!

你打算用这个Word文档做什么,编辑内容吗? - nik0lai
只是想添加一点内容:(a)微软不建议/支持使用服务器端Office来实现这种目的,以及(b)建议使用OOXML来实现这种目的。请参见http://support.microsoft.com/kb/257757。你可能更好地选择像你正在寻找的第三方解决方案。 - Paul-Jan
4个回答

17

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

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

更新:我必须承认,虽然我曾经确信我之前搜索并找到过一些旧doc格式的库,但现在我无法再找到它们了,可能是因为结果列表被许多针对docx的提供所“污染”。明确一点:

如果您能够坚持使用docx(2007年或更高版本)格式,那么应该这样做。Office Open XML是基于ZIP和XML的“开放”标准,已经存在许多工具并将来会继续开发。旧格式现在支持得少得多。

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


我为最近为一家律师事务所完成的项目对此主题进行了大量研究。Aspose是极少数支持旧的DOC格式的软件包之一,即使如此,他们支持的内容也存在一些限制(尤其是关于邮件合并字段的支持)。OOXML库在处理DOCX文件方面效果相当不错,而且不需要安装Office,但它们在进行任何重要的文档修改时可能会遇到一些挑战。不过,使用这些库从头构建文档相当容易。 - DarinH

2
  1. 你应该更好地解释一下你想要实现的结果。
  2. 不可能,MS Office交互需要在服务器上安装MS Word。
  3. 根据你的需求,你应该寻找最好的第三方库(我建议OpenXml.WordprocessingDocument),但代码必须重新编写。

2
我认为OOXML SDK 可能包含一些内容,但仅适用于docx格式,而不适用于旧的doc格式。
至于旧格式,我也希望能够以廉价、简单的方式支持它们,而无需使用自动化API。

0

你可以使用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();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接