2015-09-08 6 views
1

Я получаю список имен рабочих листов в книге, используя VB.net через Excel Interop. Я просматривал все листы, чтобы получить список имен рабочих листов.Имена рабочих листов в списке (строки)

Но я ищу более быстрый способ. Я ковырялся и нашел .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

Ваш запрос в порядке, но объявление переменной, хранящей результаты (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 
+0

Удивительно! Я был так близко. Благодаря! –

+0

@ D_Bester да, действительно близко :) – varocarbas

Смежные вопросы