我通过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
获取工作表名称列表?
答案 0 :(得分: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