无法使用Interop打开Office文档

时间:2014-08-26 14:15:46

标签: c# office-interop com-interop ms-project

代码:

ApplicationClass projectApp = new ApplicationClass();

if (projectApp.FileOpen(path, true, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
PjPoolOpen.pjDoNotOpenPool, Missing.Value, Missing.Value, Missing.Value, Missing.Value))
{
    projects = new List<Project>(projectApp.Projects.Cast<Project>());
    foreach (Project project in projects)
    {
        MSProjectProject msProject = new MSProjectProject();

        msProject.Author = project.Author.ToString(); // ERROR HERE
        msProject.Name = project.Name;
    }
}

例外:

  

无法转换类型的COM对象   接口的'Microsoft.Office.Interop.MSProject.ProjectClass'   键入“Microsoft.Office.Interop.MSProject._IProjectDoc”。这个操作   失败,因为QueryInterface调用了COM组件   与IID'{00020B00-0000-0000-C000-000000000046}'的接口失败   出现以下错误:RPC服务器不可用。 (例外   HRESULT:0x800706BA)。

异常2:(这个不会被try块捕获)

  

检测到DisconnectedContext

     

为此RuntimeCallableWrapper转换到COM上下文0x265048   失败,出现以下错误:请求的对象不存在。   (来自HRESULT的异常:0x80010114)。这通常是因为   创建此RuntimeCallableWrapper的COM上下文0x265048具有   已断开连接或正忙于做其他事情而不能   处理上下文转换。没有代理将用于服务   对COM组件的请求和调用将发送给COM   组件直接。这可能会导致损坏或数据丢失。避免   这个问题,请确保所有COM上下文/公寓/线程   保持活力,可用于上下文过渡,直到   应用程序完全使用RuntimeCallableWrappers完成   代表它们内部的COM组件。

当我第一次访问project时,抛出异常。我做错了什么?

另外,我是Interop的新手,当我访问一个文件时,它会让我感到困扰。有没有办法只查看其内容而不是打开它?

Interop Runtime版本: v2.0.50727;

互操作版本: 14.0.0.0;

项目版本: 2013(15.0.4569.1504);

1 个答案:

答案 0 :(得分:0)

分辨率很简单:停止使用Interop,它是GARBAGE。它很麻烦,需要永远处理文档,在处理文档之前打开文档,有时根本不会工作而不告诉你原因,除非它确实存在并且你有上述问题,没有人可以提供帮助。

虽然MPXJ在.NET中实现了Java,但它仍然优于Interop!