我正在通过 Excel 互操作使用 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 [系统.字符串]'。那么如何使用
.Cast
获取工作表名称列表?MSDN: Enumerable.Cast(Of TResult) Method
最佳答案
您的查询很好,但存储结果的变量声明 (lis
) 是错误的。请注意 LINQ
方法返回 Enumerable
-like 类型,需要明确转换为特定的集合类型(在本例中为 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
关于vb.net - 要列出的工作表名称(字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32450561/