Как удалить диапазон строк из vb.net объект openxml IEnumerable(Из Строки)?

#vb.net #openxml

Вопрос:

Я использую openxml в vb.net проект для анализа данных в файле Excel с большим количеством строк в объект DataTables. Каждая строка в файле excel анализируется и добавляется в качестве объекта DataRow в DataTable.

Если задание не удастся, я хочу пропустить все строки, которые уже были проанализированы. Однако мне все еще нужно проанализировать первую строку, потому что она используется для настройки имен столбцов в таблице данных.

Я ищу способ удалить строки со 2 по X в объекте openxml IEnumerable(Из строки).

     'open the excel doc
    Dim doc As SpreadsheetDocument = SpreadsheetDocument.Open(FilePath, False)

    'Read the first Sheet from Excel file.
    Dim sheet As Sheet = doc.WorkbookPart.Workbook.Sheets.GetFirstChild(Of Sheet)()

    'Get the Worksheet instance.
    Dim worksheet As Worksheet = TryCast(doc.WorkbookPart.GetPartById(sheet.Id.Value), WorksheetPart).Worksheet

    'Fetch all the rows present in the Worksheet. 
    Dim rows As IEnumerable(Of Row) = worksheet.GetFirstChild(Of SheetData)().Descendants(Of Row)()

    ' set a starting row value
    Dim startingRow as Integer = 125000

    'Remove rows 2 through startingRow from the "rows" IEnumerable(Of Row) variable..
    '** this is where I am stuck!!!!!!!!!!!!!!!!
 

К вашему сведению, C# добавлен в качестве тега, так как активных программистов VB больше не так много. Я с радостью конвертирую любые решения/советы на C# в VB.

Комментарии:

1. Невозможно удалить элементы из an IEnumerable , потому что, по определению, an IEnumerable -это объект, который можно перечислить, и это все. Что касается интерфейсов, то IList именно они обеспечивают произвольный доступ и, следовательно, добавление, вставку и удаление. Все, что вы можете сделать, это перечислить объект и игнорировать элементы, которые вам не нужны. Вы можете создать новый IEnumerable с первого и включать только нужные вам элементы различными способами, в том числе с Where помощью или, если это имеет значение, с Skip помощью и, если это индексы Take .

Ответ №1:

Вместо того , чтобы «удалять» строки только для чтения IEnumerable , более простым способом было бы просто перебирать нужные вам строки, а именно строку 1, затем строки X 1 до конца:

   rows = rows.Take(1).Concat(rows.Skip(startingRow))
 

Комментарии:

1. Делает именно то, о чем я прошу. Спасибо!