要列出的工作表名称(string)

我通过Excel Interop使用VB.net获取工作簿中的工作表名称列表。 我正在循环查看所有表单以获取工作表名称的列表。

但是我正在寻找更快的方法。 我正在四处寻找,发现。 这引发了这个问题。 我无法在互联网上find任何有关这种可能性的信息。

 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 

失败,出现此错误:无法强制types'WhereSelectEnumerableIterator 2[Microsoft.Office.Interop.Excel.Worksheet,System.String]' to type 'System.Collections.Generic.List 1 [System.String]'。

那么如何使用.Cast获取工作表名称列表呢?

MSDN:Enumerable.Cast(的TResult)方法

您的查询是好的,但存储结果( lis )的variables声明是错误的。 请注意, LINQ方法返回Enumerable的types,需要明确地将其转换为特定的集合types(在这种情况下为List(Of String) )。 您的代码可以通过以下方式修复:

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

或者,您可能不会在任何时候执行到列表的转换,只依赖于LINQ查询输出的types。 例如:

 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