для фильтра Согласно автофильтру, вам необходимо прочитать AutoFilter из файла и сгенерировать выражение sql. Я пишу вам структуру кода для чтения автофильтр с использованием OpenXml библиотеки:
Dim SheetName = "SheetName"
Dim fileFullName As String = "C:\MyExcel.xlsx"
Dim SqlFilterExpression As String
Using xslDoc As SpreadsheetDocument = SpreadsheetDocument.Open(fileFullName, False)
Dim theSheet As Sheet = xslDoc.WorkbookPart.Workbook.Sheets.FirstOrDefault(Function(SheetEl) CType(SheetEl, Sheet).Name = SheetName)
Dim WorkSheetPart As WorksheetPart = xslDoc.WorkbookPart.GetPartById(theSheet.Id)
Dim Filter = WorkSheetPart.Worksheet.Elements(Of AutoFilter).First
If Not IsNothing(Filter) Then
For Each FilterPerColumn In Filter.Elements(Of FilterColumn)()
Dim CustomFilters = FilterPerColumn.Elements(Of CustomFilters).FirstOrDefault
If Not IsNothing(CustomFilters) Then
Dim filters = CustomFilters.Elements(Of CustomFilter)()
'check if filter contient tow condition
If filters.Count = 1 Then
Select Case CType(filters(0).Operator, FilterOperatorValues)
Case FilterOperatorValues.LessThan
'...Ect.
End Select
Else
'check if condition joined by or/and
If CustomFilters.And Then
'and joined
Else
'or joined
End If
End If
End If
Next
End If
End Using
Потому что после того, как все XML-файл последовательного доступа, очень его возможно, что чтение всех файлов по OpenXml будет занимать то же время.
Спасибо Ломед, проблема в том, что Excel уже предварительно фильтруется различными критериями для пользователя. Мне просто нужно загрузить только отфильтрованные строки. В двух словах, я должен иметь возможность загружать только видимые строки. Есть идеи? - Еще раз спасибо! – user2003438