vb.net - 要列出的工作表名称(字符串)

标签 vb.net excel

我正在通过 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/

相关文章:

.net - 根据屏幕分辨率更改表单的分辨率(不更改显示器分辨率并使用最大化屏幕选项)

vb.net - Visual basic 中的 E.cancel 循环

vb.net - ADO - 解析字符串 URL 并使用参数

vba - 使 VBA 表单文本框仅接受数字(包括 +、- 和 .)

arrays - 将数组公式从 MS Excel 转换为 Google 表格

C# - 如何以编程方式添加 Excel 工作表 - Office XP/2003

python - 使用 Python 编写和修改现有工作簿

asp.net - 你知道我怎样才能让这个函数产生正确的结果吗?

c# - 使用互操作在 Excel 工作簿中写入长文本会引发错误?

excel - 如何删除 Excel 中的 #DIV/0 错误