2011-03-22 32 views
4

我不喜歡這樣獲得的代號爲工作表在Excel中:如何使用VSTO

if (Excel._Application.ActiveWorkbook != null) 
{ 
    List<WorksheetKeyValue> sheets = new List<WorksheetKeyValue>(); 
    foreach (object ws in ExcelApp.ActiveWorkbook.Worksheets) 
    { 
     string strCodeName = ws.CodeName 
    } 
} 

strCodeName是一個空字符串時,它應該是工作表Sheet1,Sheet2中,...,SheetN像VBA。

感謝

回答

5

在您的情況下,您可以使用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 
    } 
} 

希望這有助於。

+0

感謝@Santoo這真的對我有用 – 2011-03-22 09:56:21

2

在VSTO中,CodeName屬性是,你不應該從你的代碼中使用的基礎結構性能。

從MSDN:

此屬性支持Visual Studio工具辦公室基礎設施 ,不適合直接在代碼中使用 。

告訴我們你想要完成的事情,也許有另一種方法可以做你想做的事。

另外,我從您的代碼中注意到您正在使用Excel Addin。如果使用Excel文檔自定義而不是Excel插件,則可以嘗試檢查CodeName屬性是否返回所期望的內容。

更新: 爲了讓您唯一標籤,你可以使用一個GUID並將其設置爲使用Worksheet.CustomProperties工作表的自定義屬性工作表。

+0

謝謝@JoãoAngelo。我試圖給每個工作表一個獨特的屬性。以便以後我可以確定正確的工作表。由於我不能依賴工作表索引,因爲它變了。 – 2011-03-22 09:46:15

相關問題