【问题标题】:Error Occurred When Instantiating a Microsoft.Office.Interop.Word Object实例化 Microsoft.Office.Interop.Word 对象时发生错误
【发布时间】:2018-02-06 05:11:52
【问题描述】:

我目前正在检索文件系统上的一个 word 文件,以便在 .NET 的 MVC 5 razer 视图中显示它。现在,在测试和使用我的本地机器时,该文件已正确显示在我的本地 IIS 上。出于测试目的,我还将文件保存在本地计算机上。

在我的本地机器上测试时一切正常。然后我将更改发布/部署到我的远程服务器的 IIS 并检查该站点是否正常工作。当我转到显示 Word 文件的页面时,我收到一条错误消息“处理您的请求时发生错误。”

代码如下

public ActionResult GetChapterContent()
    {
        StringBuilder text = new StringBuilder();
        Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
        object miss = System.Reflection.Missing.Value;
        object path = @"/Books/1/Chapters/1/chapter-1.docx";
        //object path = @"/Books/1/Chapters/1/chapter-1.docx";
        object readOnly = true;
        Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);

        var y = false;
        for (int i = 0; i < docs.Paragraphs.Count; i++)
        {

            if(docs.Paragraphs[i + 1].Range.Text.Contains("***")) {
                if (y == false)
                {
                    text.Append("<span class='ci'>" + docs.Paragraphs[i + 1].Range.Text.ToString().Substring(3));
                    y = true;
                }
                else
                {
                    text.Append(docs.Paragraphs[i + 1].Range.Text.ToString().Remove(docs.Paragraphs[i + 1].Range.Text.ToString().Length - 4, 3) + "</span>");
                    y = false;
                }
            }
            else {
                text.Append("" + docs.Paragraphs[i + 1].Range.Text.ToString());
            }
        }
        return Content("DF");
    }

现在,我已设法将问题缩小到前两行代码:

StringBuilder text = new StringBuilder();
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

只有这两行代码会导致错误。如果我删除它 - 一切都会好起来的。

【问题讨论】:

  • 确保你有word应用是你的服务器并且有足够的权限
  • 我在想我的服务器也需要 Word。但这是真的吗?我不能只安装一些轻量级的东西而不是完全安装 Office 吗? Office 不是一个安装在服务器上的小程序...
  • 不.. 要使 word interop 工作,您需要在服务器上安装 microsoft word
  • 其他替代方法是使用 OpenXml
  • Interop 早已死去。使用 OpenXml。

标签: c# .net asp.net-mvc-5 office-interop


【解决方案1】:

也许你可以试试NPOI,它可以在没有办公室的情况下操作你的excel和word。

【讨论】:

    【解决方案2】:

    这里有两件事,因为Microsoft.Office.Interop 需要您的系统上有一个有效的办公包

    1) 使用NPOI

    它不需要系统上的有效办公包,您可以将其用于读写等...

    2) 使用OpenXml

    用于文字处理、样式表和单元格处理。

    他们每个人都会到达所需的位置,问题是什么最适合您的需求。

    第三个选项是在远程服务器上安装office pack。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-03-21
      相关资源
      最近更新 更多