C# 使用Word 2010读取内置文档属性/CustomDocumentProperties是否始终为空?

C# 使用Word 2010读取内置文档属性/CustomDocumentProperties是否始终为空?,c#,ms-word,C#,Ms Word,我想读取Word文档的内置文档属性/CustomDocumentProperties。以下源始终返回null:-( 源代码出了什么问题?CustomDocumentProperties和BuiltInDocumentProperties可用,并在文档中填充!我对.docx文档也有同样的问题。解决方法之一是忘记类型转换,而是将动态和对象保留为类型,然后代码就工作了。我怀疑.docx文件的COM属性不是MSDN中描述的类型 因此,这段代码捕获原始文档的属性并在字典中设置它们 try {

我想读取Word文档的内置文档属性/CustomDocumentProperties。以下源始终返回null:-(


源代码出了什么问题?CustomDocumentProperties和BuiltInDocumentProperties可用,并在文档中填充!

我对.docx文档也有同样的问题。解决方法之一是忘记类型转换,而是将
动态
对象
保留为类型,然后代码就工作了。我怀疑.docx文件的COM属性不是MSDN中描述的类型

因此,这段代码捕获原始文档的属性并在字典中设置它们

  try
  {
       BuiltInDocumentProperties = new Dictionary<string, string>();
       var builtinProps = Doc.BuiltInDocumentProperties; // don't strong cast this or you will get null
       SetBuiltInProperty(builtinProps, "Title");
       SetBuiltInProperty(builtinProps, "Keywords");
  }
  catch (Exception e)
  {
       // Ignorer l'erreur
       Log.Warn("Erreur inattendue à la lecture des propriétés internes du document", e);
  }

  IDictionary<string, string> BuiltInDocumentProperties { get; set; }

  internal void SetBuiltInProperty(dynamic builtInProps, string property)
  {
      if (builtInProps != null)
      {
          try
          {
              var prop = builtInProps[property];
              if (prop != null)
              {
                  string str = prop.Value.ToString();
                  BuiltInDocumentProperties[property] = str;
              }
          }
          catch (RuntimeBinderException)
          {
              // Property is missing
          }
          catch (COMException)
          {

          }
      }
 }
试试看
{
内置文档属性=新字典();
var builtinProps=Doc.builtinocumentproperties;//不要强制转换此属性,否则将得到null
SetBuiltInProperty(内置项目,“标题”);
SetBuiltInProperty(内置操作,“关键字”);
}
捕获(例外e)
{
//埃尔勒先生
Log.Warn(“文件内部固有知识讲座的疏忽”,e);
}
IDictionary内置文档属性{get;set;}
内部void SetBuiltInProperty(动态内置操作,字符串属性)
{
if(内置操作!=null)
{
尝试
{
var prop=内置操作[属性];
如果(prop!=null)
{
字符串str=prop.Value.ToString();
内置文档属性[属性]=str;
}
}
捕获(RuntimeBinderException)
{
//财产不见了
}
捕获(COMException)
{
}
}
}

我在尝试从另一个线程访问它们时看到了这个问题,尽管您似乎没有这样做。公认的答案仍然适用于这种情况。
  try
  {
       BuiltInDocumentProperties = new Dictionary<string, string>();
       var builtinProps = Doc.BuiltInDocumentProperties; // don't strong cast this or you will get null
       SetBuiltInProperty(builtinProps, "Title");
       SetBuiltInProperty(builtinProps, "Keywords");
  }
  catch (Exception e)
  {
       // Ignorer l'erreur
       Log.Warn("Erreur inattendue à la lecture des propriétés internes du document", e);
  }

  IDictionary<string, string> BuiltInDocumentProperties { get; set; }

  internal void SetBuiltInProperty(dynamic builtInProps, string property)
  {
      if (builtInProps != null)
      {
          try
          {
              var prop = builtInProps[property];
              if (prop != null)
              {
                  string str = prop.Value.ToString();
                  BuiltInDocumentProperties[property] = str;
              }
          }
          catch (RuntimeBinderException)
          {
              // Property is missing
          }
          catch (COMException)
          {

          }
      }
 }