2015-09-08 63 views
1

我通過Excel Interop使用VB.net獲取工作簿中工作表名稱的列表。我遍歷所有表單以獲取工作表名稱的列表。要列出的工作表名稱(的字符串)

但我正在尋找更快的方法。我正在四處尋找,發現.Cast。這引發了這個問題。我無法在互聯網上找到任何關於這種可能性的信息。

Imports Excel = Microsoft.Office.Interop.Excel 
Function GetWorksheetNames(ByVal wb As Excel.Workbook) As List(Of String) 
    Dim lis As List(Of String) 
    lis = wb.Worksheets.Cast(Of Excel.Worksheet)().Select(Function(x) x.Name) 
Return lis 
End Function 

無法與此錯誤:無法轉換類型的對象 'WhereSelectEnumerableIterator 2[Microsoft.Office.Interop.Excel.Worksheet,System.String]' to type 'System.Collections.Generic.List 1 [System.String]'。

那麼如何使用.Cast獲得工作表名稱列表?

MSDN: Enumerable.Cast(Of TResult) Method

回答

1

您所查詢的是好的,但可變的存儲結果(lis)的聲明是錯誤的。請注意,LINQ方法返回類型爲Enumerable的類型,需要將其明確轉換爲特定的集合類型(本例中爲List(Of String))。您的代碼可以被固定在以下方式:

lis = wb.Worksheets.Cast(Of Excel.Worksheet)().Select(Function(x) x.Name).ToList 

或者,你可能不會在任何時候進行轉換到一個列表,只是依靠類型是由LINQ查詢輸出。例如:

Dim lis2 = xlWbSource.Worksheets.Cast(Of Excel.Worksheet)().Select(Function(x) x.Name) 

For Each name As String In lis2 

    'Use name as you want 

Next 
+0

令人驚歎!我很親密。謝謝! –

+0

@D_Bester是的,真的很接近:) – varocarbas

相關問題