要列出的工作表名称(字符串)

时间:2015-09-08 06:20:59

标签: vb.net excel

我通过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 个答案:

答案 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