我确实喜欢这个:
if (Excel._Application.ActiveWorkbook != null)
{
List<WorksheetKeyValue> sheets = new List<WorksheetKeyValue>();
foreach (object ws in ExcelApp.ActiveWorkbook.Worksheets)
{
string strCodeName = ws.CodeName
}
}
但strCodeName
是一个空字符串,它应该是在VBA中的Sheet1,Sheet2,...,SheetN。
由于
答案 0 :(得分:6)
在您的情况下,您可以使用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
}
}
希望这有帮助。
答案 1 :(得分:2)
在VSTO中,CodeName
属性是一个基础结构属性,您不应该在代码中使用该属性。
来自MSDN:
此属性支持Visual 用于Office基础结构的Studio工具 并不打算使用 直接来自您的代码。
告诉我们你想要完成什么,也许有另一种方法可以做你想做的事。
另外,我从您的代码中注意到您使用的是Excel Addin。如果使用Excel文档自定义而不是Excel Addin,您可以尝试检查CodeName
属性是否返回预期。
<强>更新强>
为了对工作表进行唯一标记,您可以使用GUID并使用Worksheet.CustomProperties
将其设置为工作表的自定义属性。