In documentele Office( Excel, Word, ..) putem sa stocam meta-propietati. Aceste meta-propietati sunt denumite custom properties. O parte din ele sunt definite de catre fiecare utilizator in parte, iar altele exista by default.
Informatii precum "Last Saved Time" sau "Last Author" sunt setate automat de catre Office in momentul in care lucram cu un document. In cazul in care dorim sa accesam aceste informatii din .NET 4.0 este destul de simplu, dynamic types isi face perfect treaba aici.
Partea interesanta este cand este nevoie sa accesam aceste date din .NET 3.5 de exemplu, unde dynamic types exista, dar nu ne permite sa il folosim asa cum am dorii.
Pentru a putea sa accesam custom properties dintr-un document Office, in .NET 3.5 trebuie sa ne reintoarcem putin in timp. Orice incercare de a accesa aceste propietati direct, o sa termine cu o eroare de COM la runtime.
Mai jos gasiti un sample de cod care permite accesul la meta-propietatiile unui document Office.
Informatii precum "Last Saved Time" sau "Last Author" sunt setate automat de catre Office in momentul in care lucram cu un document. In cazul in care dorim sa accesam aceste informatii din .NET 4.0 este destul de simplu, dynamic types isi face perfect treaba aici.
Partea interesanta este cand este nevoie sa accesam aceste date din .NET 3.5 de exemplu, unde dynamic types exista, dar nu ne permite sa il folosim asa cum am dorii.
Pentru a putea sa accesam custom properties dintr-un document Office, in .NET 3.5 trebuie sa ne reintoarcem putin in timp. Orice incercare de a accesa aceste propietati direct, o sa termine cu o eroare de COM la runtime.
((DocumentProperties)docWorkbook.BuiltinDocumentProperties)["Last Author"]
((DocumentProperties)docWorkbook.BuiltinDocumentProperties).Items[0]
Ca sa putem accesa aceste valori este nevoie sa apelam la Reflection. Orice call pe care il facem pe obiectul de tip DocumentProperties trebuie sa se faca prin reflection. Din cauza ca este un lazy binding, orice conversie a propietatii BuiltinDocumentProperties spre DocumentProperties o sa se termine cu o exceptie.Mai jos gasiti un sample de cod care permite accesul la meta-propietatiile unui document Office.
private string GetDocumentProperty(Application doc, string propertyName)
{
object documentProperties = doc.Workbook.BuiltinDocumentProperties;
Type propertiesType = documentProperties.GetType();
object properties = propertiesType.InvokeMember("Item",
BindingFlags.Default |
BindingFlags.GetProperty,
null, documentProperties,
new object[] { propertyName });
Type propertyType = properties.GetType();
return propertyType.InvokeMember("Value",
BindingFlags.Default |
BindingFlags.GetProperty,
null, properties,
new object[] { }).ToString();
}
Comments
Post a Comment