读取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是可用的,并在文档中填写!
我有同样的问题。docx文档。解决问题的一种方法是忘记类型转换,而是保留dynamic
和object
作为类型,然后代码就可以工作了。我怀疑。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)
{
}
}
}