实例化Microsoft.Office.Interop.Word对象时发生错误

时间:2018-02-06 05:11:52

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

我目前正在检索文件系统上的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();

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

1)使用NPOI

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

2)使用OpenXml

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

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

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