如何使用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将其设置为工作表的自定义属性。