Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft Office Interop:无法将带[]的索引应用于类型为';对象';_C#_Vsto_Office Interop - Fatal编程技术网

C# Microsoft Office Interop:无法将带[]的索引应用于类型为';对象';

C# Microsoft Office Interop:无法将带[]的索引应用于类型为';对象';,c#,vsto,office-interop,C#,Vsto,Office Interop,以下是我的代码,之前已成功获取文档标题。但现在,它抛出如下所示的错误: string sTitle = oActiveDoc.BuiltInDocumentProperties["Title"].Value; 错误: string sTitle = oActiveDoc.BuiltInDocumentProperties["Title"].Value as string; 无法将带[]的索引应用于“object”类型的表达式 基于一些类似的在线解决方案(如和),我尝试了以下代码,但仍然得到了

以下是我的代码,之前已成功获取文档标题。但现在,它抛出如下所示的错误:

string sTitle = oActiveDoc.BuiltInDocumentProperties["Title"].Value;
错误

string sTitle = oActiveDoc.BuiltInDocumentProperties["Title"].Value as string;
无法将带[]的索引应用于“object”类型的表达式

基于一些类似的在线解决方案(如和),我尝试了以下代码,但仍然得到了完全相同的错误

问题:我在这里可能缺少什么,如何解决

Ref:获取表示文档的所有内置文档属性的
集合

以下也给出了完全相同的错误:

string sTitle = oActiveDoc.BuiltInDocumentProperties["Title"].Value as string;

试一试

你能试试吗

         string sTitle;
         dynamic properties = oActiveDoc.BuiltInDocumentProperties;
         var property = properties["Title"];    
         if (property != null)
          {
              sTitle = property.Value.ToString();
          }

有几种方法可以弥补目前为止存在的例外情况:

  • 使用
    动态
    对象
    引用。请在页面上阅读有关此方法的更多信息

  • 使用该方法在.net framework中表示的后期绑定技术


  • 当我尝试您的建议时,出现以下错误:
    object'不包含'Item'的定义,并且找不到接受'object'类型的第一个参数的可访问扩展方法'Item'(您是否缺少using指令或程序集引用?
    我想知道问题是否与
    内置文档属性
    动态
    类型有关。尽管多年来我一直使用
    string-sTitle=oActiveDoc.BuiltInDocumentProperties[“Title”].Value;
    在我的许多
    VSTO
    项目上,使用从
    VS2010
    到最新的Visual Studio,但从来没有出现过这个问题。是的,没有使用动态项函数,但是.Net隐藏了属性索引器。发生了什么变化?它运行在不同的计算机上吗?您的office版本有变化吗?@MikeJ因为上面的代码一直在m上工作自2010年以来的各种
    VSTO
    项目,显然是机器(XP、VISTA、Win10等)、Visual Studio版本(201020120320152019)以及Office版本92003/2007/2010/2016/O365等)也发生了变化。以前所有这些版本都使用了相同的代码行。从这一点来看,上面的代码行可能并不总是可靠的。听起来你找到了下面的答案,但只是出于好奇,你是否尝试将oActiveDoc.BuiltinoDocumentProperties转换为Microsoft.Office.Core.DocumentProperties?失败了吗?是的像您最初构建项目时使用的旧PIA一样的OUND不再适用于较新版本的office。后期绑定可能是最安全的方法,但我很好奇.net是否检测到相同的类型。您的解决方案有效(谢谢)。我不确定它是否在所有情况下都能工作。但就我的情况而言,现在是这样。但是,
    string-sTitle=oActiveDoc.builtinocumentproperties[“Title”].Value;
    以前也能工作,现在也不能了。所以,让我祈祷吧。您提供的第一个链接可能是一个更持久的解决方案(我的投票)虽然有点复杂。谢谢你分享这个链接。
             string sTitle;
             dynamic properties = oActiveDoc.BuiltInDocumentProperties;
             var property = properties["Title"];    
             if (property != null)
              {
                  sTitle = property.Value.ToString();
              }