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

12 浏览
0 Comments

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

我目前正在从文件系统检索一个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("" + 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) + "");
                    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();

只要有这两行代码,就会导致错误。如果我删除它们 - 一切都会正常。

0
0 Comments

(Error Occurred When Instantiating a Microsoft.Office.Interop.Word Object)这个问题的出现的原因是在系统上需要一个有效的office包。解决方法有三种:

1)使用NPOI,它不需要系统上的有效office包,可以用于读写等操作。

2)使用OpenXml,用于处理Word处理、样式表和单元格处理。

每种方法都可以达到所需的目标,问题是哪种方法最适合您的需求。

第三种选择是在远程服务器上安装office包。

0
0 Comments

(Error Occurred When Instantiating a Microsoft.Office.Interop.Word Object)

问题原因:

可能是由于缺少Microsoft Office组件或版本不兼容导致Microsoft.Office.Interop.Word对象实例化时出错。

解决方法:

尝试使用NPOI来操作Excel和Word,而无需安装Microsoft Office。

NPOI是一个开源的.NET库,用于处理Microsoft Office格式的文件。它可以帮助我们在没有安装Microsoft Office的情况下,操作Excel和Word文件。

使用NPOI库来处理Word文件的示例代码如下:

 
using NPOI.XWPF.UserModel;
using System.IO;
class Program
{
    static void Main(string[] args)
    {
        // 创建一个新的Word文档
        XWPFDocument document = new XWPFDocument();
        // 创建一个段落
        XWPFParagraph paragraph = document.CreateParagraph();
        // 创建一个文本
        XWPFRun run = paragraph.CreateRun();
        // 设置文本内容
        run.SetText("Hello, World!");
        // 保存文档
        using (FileStream stream = new FileStream("output.docx", FileMode.CreateNew))
        {
            document.Write(stream);
        }
    }
}

通过使用NPOI库,我们可以在不安装Microsoft Office的情况下,实现对Word文件的操作。这样可以避免由于缺少Office组件或版本不兼容而导致的错误。

0