我正在尝试将自定义属性添加到我以编程方式创建的工作簿中。我有一个方法来获取和设置属性,但问题是工作簿为CustomDocumentProperties属性返回null。我无法弄清楚如何初始化此属性,以便我可以从工作簿添加和检索属性。 Microsoft.Office.Core.DocumentProperties是一个接口,所以我不能去做以下
I'm trying to add custom properties to a workbook I have created programatically. I have a method in place for getting and setting properties, but the problem is the workbook is returning null for the CustomDocumentProperties property. I cannot figure out how to initialize this property so that I can add and retrieve properties from the workbook. Microsoft.Office.Core.DocumentProperties is an interface, so I cant go and do the following
if(workbook.CustomDocumentProperties == null) workbook.CustomDocumentProperties = new DocumentProperties;以下是我必须获取并设置属性的代码:
Here is the code I have to get and set the properties:
private object GetDocumentProperty(string propertyName, MsoDocProperties type) { object returnVal = null; Microsoft.Office.Core.DocumentProperties properties; properties = (Microsoft.Office.Core.DocumentProperties)workBk.CustomDocumentProperties; foreach (Microsoft.Office.Core.DocumentProperty property in properties) { if (property.Name == propertyName && property.Type == type) { returnVal = property.Value; } DisposeComObject(property); } DisposeComObject(properties); return returnVal; } protected void SetDocumentProperty(string propertyName, string propertyValue) { DocumentProperties properties; properties = workBk.CustomDocumentProperties as DocumentProperties; bool propertyExists = false; foreach (DocumentProperty prop in properties) { if (prop.Name == propertyName) { prop.Value = propertyValue; propertyExists = true; } DisposeComObject(prop); if(propertyExists) break; } if (!propertyExists) { properties.Add(propertyName, false, MsoDocProperties.msoPropertyTypeString, propertyValue, Type.Missing); } DisposeComObject(propertyExists); }行属性= workBk.CustomDocumentProperties为DocumentProperties; 始终将属性设置为null。
The line properties = workBk.CustomDocumentProperties as DocumentProperties; always set properties to null.
这是使用Microsoft.Office.Core v12.0.0.0和Microsoft.Office.Interop.Excell v12.0.0。 0(Office 2007)
This is using Microsoft.Office.Core v12.0.0.0 and Microsoft.Office.Interop.Excell v12.0.0.0 (Office 2007)
推荐答案我看了我自己的代码,可以看到我使用后期绑定访问属性。我不记得为什么,但我会发布一些代码,以防它有帮助。
I looked at my own code and can see that I access the properties using late binding. I can't remember why, but I'll post some code in case it helps.
object properties = workBk.GetType().InvokeMember("CustomDocumentProperties", BindingFlags.Default | BindingFlags.GetProperty, null, workBk, null); object property = properties.GetType().InvokeMember("Item", BindingFlags.Default | BindingFlags.GetProperty, null, properties, new object[] { propertyIndex }); object propertyValue = property.GetType().InvokeMember("Value", BindingFlags.Default | BindingFlags.GetProperty, null, propertyWrapper.Object, null);编辑:啊,现在我记得为什么。 : - )
EDIT: ah, now I remember why. :-)
编辑2 :Jimbojones的答案 - 使用动态关键字 - 是一个更好的解决方案(如果您重视易用性,使用动态的性能开销)。
EDIT 2: Jimbojones' answer - to use the dynamic keyword - is a better solution (if you value ease-of-use over the performance overhead of using dynamic).
更多推荐
以编程方式访问Excel自定义文档属性
发布评论