读取BuiltInDocumentProperties/CustomDocumentProperties总是null与W

本文关键字:null 总是 CustomDocumentProperties BuiltInDocumentProperties 读取 | 更新日期: 2023-09-27 18:06:21

我想读出一个Word文档的BuiltInDocumentProperties/CustomDocumentProperties。下面的Source总是返回null:-(

)
using Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
.....
    private void toolStripMenuItemTmp_Click(object sender, EventArgs e)
    {
        Word.Application word = new Word.Application();
        Word.Document document = word.Documents.Open(@"C:'Users'fillibuster'Desktop'docproperty.docx");
        DocumentProperties properties = (DocumentProperties)document.CustomDocumentProperties;
        if (properties != null)
        {
            foreach (Microsoft.Office.Core.DocumentProperty item in properties)
            {
                MessageBox.Show(item.Name.ToString() + item.Value.ToString());
            }
        }
        else
        {
            MessageBox.Show("null");
        }
    }

来源出了什么问题?CustomDocumentProperties和BuiltInDocumentProperties是可用的,并在文档中填写!

读取BuiltInDocumentProperties/CustomDocumentProperties总是null与W

我有同样的问题。docx文档。解决问题的一种方法是忘记类型转换,而是保留dynamicobject作为类型,然后代码就可以工作了。我怀疑。docx文件的COM属性不是MSDN中描述的类型…

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

  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)
          {
          }
      }
 }