![](/img/trans.png)
[英]How to set custom properties in the currently active Word document via OpenXML
[英]Not sure how to access custom properties set in OpenXML from within VSTO
我有一個有兩個要求的項目。 一種方法是創建一個簡單的程序,以從Excel外部將自定義屬性添加到excel電子表格。 第二個要求是在應用程序級別vsto Excel加載項內搜索並提取該自定義屬性(如果找到)。
到目前為止,我已經滿足了第一個要求,並且有一個程序可以通過OpenXML將一些數據添加到工作簿的CustomFileProperties中,如下所示:
using (var wb = SpreadsheetDocument.Open(WorkbookToRegister, true))
{
Log("Finding existing properties...");
var customPropsPart = wb.CustomFilePropertiesPart;
if (customPropsPart == null)
{
Log("No properties found, adding new part...");
customPropsPart = wb.AddCustomFilePropertiesPart();
}
var props = customPropsPart.Properties;
if (props == null)
{
props = new DocumentFormat.OpenXml.CustomProperties.Properties();
customPropsPart.Properties = props;
}
foreach (var prop in props.Where(
prop => ((CustomDocumentProperty)prop).Name.Value == "niuVersionNumber"))
{
Log("Removing existing properties...");
prop.Remove();
}
Log("Adding new properties,..");
var versionProp = new CustomDocumentProperty();
versionProp.FormatId = Guid.NewGuid().ToString("B");
propertyGuid = versionProp.FormatId;
versionProp.Name = "niuVersionNumber";
propertyName = versionProp.Name;
versionProp.VTBString = new VTBString(versionNumber);
props.AppendChild(versionProp);
var pid = 2;
Log("Assigning IDs to properties,..");
foreach (var item in props.Cast<CustomDocumentProperty>())
{
item.PropertyId = pid++;
}
Log("Saving...");
props.Save();
}
如您所見,該代碼向文件中添加了一個名為“ niuVersionNumber”的屬性,其值為versionNumber 。 這可以完美地工作。
問題是第二個要求。 我還無法弄清楚如何從VSTO API中訪問該自定義屬性。
我已經搜索了MSDN和互連網,並且了解OpenXML和VSTO API文檔,但是很難完全理解如何使它工作。
任何建議或示例,將不勝感激!
問候,
喬
感謝您的反饋,但最終問題是我對准了錯誤的對象。 我誤解了自定義屬性和自定義xml部分之間的區別。
而不是像這樣定位文檔的自定義屬性對象:
props = new DocumentFormat.OpenXml.CustomProperties.Properties();
我應該像這樣針對文檔的自定義xml部分:
var customWorkBookVersionXmlPart = wb.WorkbookPart.AddCustomXmlPart("application/xml");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.