Microsoft.Office.Interop.Word错误在代码中打开文档文件

时间:2014-03-03 09:51:26

标签: c# ms-word office-interop

有人可以帮助解决使用Microsoft.Office.Interop.Word在代码中打开Word2003文件的问题吗?

我的代码如下。文档创建正常,如果我在创建后暂停代码,我可以通过资源管理器打开文件。代码冻结在最后一行。此时,可以看到文件锁定元文件出现在资源管理器和原始文件中。我没有看到错误。也许有一个看不见的对话,但否则我很难过。 提前谢谢。

  1. 首先将字节数组写入文件

    var tmpFile = @"C:\donkey.doc";
    File.WriteAllBytes(tmpFile, binary_document);
    
  2. 将文件作为某种类型的文档对象

    打开
    Application app = new Application();
    Document CurrDoc = app.Documents.Open(@"C:\donkey.doc");
    
  3. 冻结解决方案是重新安装Word2003,尽管由于此处标识的服务器问题http://support.microsoft.com/kb/257757我实际上完全放弃了这种方法。感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

试试这可能对你有帮助。

创建一个新的"桌面"目录里面的" C:\ Windows \ SysWOW64 \ config \ systemprofile \" 经过漫长的漫长的一天寻找解决方案后,它对我有用。

它会成为个人资料问题。

答案 1 :(得分:2)

我将在相同的情况下检查

  1. 权限访问
  2. 在C#之外创建一个文件,只保留文件打开部分
  3. 当遇到open命令时,任务管理器是否运行了Microsoft Word exe?

  4. 解决的建议

    1)作为控制台应用程序运行(我提到的那些帖子在控制台中运行良好)

    2)尝试将CurrDoc.Activate()放在CurrDoc = app.Documents.Open(@"C:\donkey.doc");

    之后

    3)尝试声明byte[] binary_document = { 112 };但不使用当前数组让File.WriteAllBytes()更快地完成工作。

    4)尝试Interop.Word Documents.Open is null

    的最高投票帖子

    5)在Word 2007 Documents.Open returns null in ASP.NET

    中尝试XP建议(搜索“xp”)

    6)尝试捕获异常(但看起来你的情况并非例外)

    try
    {
        CurrDoc = app.Documents.Open(tmpFile);
    }
    catch (Exception eX)
    {
        //MessageBox.Show(eX.ToString());
        Console.WriteLine(eX);
    }
    

    抱歉希望我不要混淆你。


    为我工作

    参考 @Mike Miller ,主要观点是 app.Visible 未设为true;该应用程序处于活动状态,但只有它不可见!!学习新东西。谢谢。

      

    我使用的是Microsoft Word 2010和Windows 7家庭高级版64位。

        Document CurrDoc;
        //avoid ambiguity so put in missing argument
        object missing = System.Reflection.Missing.Value;
        Microsoft.Office.Interop.Word.Application app;
    
        private void btnMakeandOpenDoc_Click(object sender, EventArgs e)
        {
            //put in some byte value into the array
            byte[] binary_document = { 112, 132, 32, 33,231,125,87 };
            var tmpFile = @"C:\donkey.doc";
            File.WriteAllBytes(tmpFile, binary_document);
            app = new Microsoft.Office.Interop.Word.Application();
            CurrDoc = app.Documents.Open(@"C:\donkey.doc");
            //main point
            app.Visible = true;
        }
    
        //close the opening doc file also
        private void btnCloseDoc_Click(object sender, EventArgs e)
        {
            CurrDoc.Close(ref missing, ref missing, ref missing);
            app.Application.Quit(ref missing, ref missing, ref missing);
        }
    

答案 2 :(得分:0)

在调试时,如果您通过资源管理器手动打开此文件,最后一行也会尝试执行相同的操作。现在,我再也记不起Office 2003的行为了,但是2010确实提示您正在尝试再次打开同一个文件(或者至少它会对我这样做)。这很可能就是原因。

答案 3 :(得分:0)

冻结解决方案是重新安装Word2003,尽管由于此处标识的服务器问题http://support.microsoft.com/kb/257757我实际上完全放弃了这种方法。感谢您的帮助。

答案 4 :(得分:0)

我创建了一个桌面文件夹,但在此文件夹中:C:\Windows\System32\config\systemprofile并授予服务帐户访问该文件夹的权限。不知道访问是否是必要的,但它有效。