如何使用VSTO在Excel中获取工作表的代码名称
我这样做:
if (Excel._Application.ActiveWorkbook != null) { List<WorksheetKeyValue> sheets = new List<WorksheetKeyValue>(); foreach (object ws in ExcelApp.ActiveWorkbook.Worksheets) { string strCodeName = ws.CodeName } }
但strCodeName
是一个空string,当它应该是Sheet1,Sheet2,…,SheetN像在VBA中。
谢谢
在您的情况下,您可以使用Worksheet.CustomProperties作为替代来保存工作表的唯一属性。
Worksheet ws = **current_sheet** as Worksheet; ws.CustomProperties.Add("SheetID", **some_value**);
所以,以后你可以像访问它们一样
foreach (Excel.CustomProperty prop in ws.CustomProperties) { if (prop.Name == "SheetID") { // access as prop.Value and prop.Name } }
希望这可以帮助。
在VSTO中, CodeName
属性是不应该从代码中使用的基础结构属性。
来自MSDN:
此属性支持Visual Studio Tools for Office基础结构,不能在代码中直接使用。
告诉我们你要完成什么,也许有另一种方法去做你想做的事情。
另外,我从您的代码中注意到您正在使用Excel Addin。 如果使用Excel文档自定义而不是Excel加载项,则可以尝试检查CodeName
属性是否返回所期望的内容。
更新:为了让您唯一地标记工作表,您可以使用GUID并使用Worksheet.CustomProperties
将其设置为工作表的自定义属性。