Считывание данных из столбцов Excel по условию - Visual Basic .NET
Формулировка задачи:
Всем доброго здоровичка!!! Такая задача:
Через OFD открываю xlsx файл. Там много листов. В листах 2 колонки, но могут быть 3. Вторая и третья колонки содержат дату (10.сент, 15.окт и т.д.) Необходимо в текстбокс записать текст из первой колонки, если во-второй совпадает дата с текущей. Вопросы:
1) как пробежать по всем листам. У меня смотрит только первый.
2) как посмотреть третью колонку, если во-второй нет этой даты.
3) имя листа почти совпадает с именем ТБ (лист "6" надо записать в ТБ "t6", лист "8" в ТБ "t8", листы "11" "112" "113" в ТБ "t11") Имя листа начинается с 6 и т.д.
4) Как Excel убрать из процессов. Он всегда там остаётся, файл становится активным и его нельзя потом открыть и редактировать.
Пробовал несколько вариантов, всё равно там висит и не закрывается (закрываю через диспетчер задач).
d.Text - лейбл, в котором отображается текущая дата в формате (10.окт)
Спасибо заранее!!!
Листинг программы
- If ff.ShowDialog = System.Windows.Forms.DialogResult.OK Then
- Dim kk As String = ff.FileName
- Dim appExcel As Object
- Dim I As Integer = 0
- appExcel = CreateObject("Excel.Application")
- appExcel.Workbooks.Open(kk)
- appExcel.Visible = False
- Dim rng As Excel.Range = appExcel.ActiveSheet.Range(startRegion).CurrentRegion
- Dim str As String = String.Empty
- ' For Each pp In appExcel.Workbooks
- For j = 1 To appExcel.sheets.Count
- appExcel.Worksheets.Item(j).Activate()
- With appExcel.ActiveSheet
- For I = 1 To rng.Rows.Count
- str = rng(I, 2).text
- If str = d.Text Then t6.Text = rng(I, 1).text
- Next
- End With
- Next
- ' Next
- End If
- Try
- releaseObject(appExcel.Sheets)
- releaseObject(appExcel.Workbooks)
- releaseObject(appExcel)
- appExcel.ActiveWorkbook.Close()
- appExcel.Quit()
- appExcel = Nothing
- Catch ex As Exception
- End Try
Листинг программы
- Private Sub releaseObject(ByVal obj As Object)
- Try
- System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
- obj = Nothing
- Catch ex As Exception
- obj = Nothing
- Finally
- GC.Collect()
- End Try
- End Sub
Решение задачи: «Считывание данных из столбцов Excel по условию»
textual
Листинг программы
- If ff.ShowDialog = System.Windows.Forms.DialogResult.OK Then
- Dim appExcel As Object, TB As TextBox, cCol As Integer, findDate = d.Text
- appExcel = CreateObject("Excel.Application")
- With appExcel.Workbooks.Open(ff.FileName)
- For Each sh In .sheets
- TB = Controls("t" + sh.name)
- If TB Is Nothing Then
- MsgBox("Не найдено поле для листа " + sh.name)
- Continue For
- End If
- TB.Clear()
- With sh.Range(startRegion).CurrentRegion
- cCol = .columns.count
- If cCol < 2 Then
- MsgBox("На листе " + sh.name + " меньше двух колонок")
- Continue For
- End If
- For i = 1 To .rows.count
- If .cells(i, 2).text = findDate OrElse (cCol >= 3 AndAlso .cells(i, 3).text = findDate) Then
- TB.Text = .cells(i, 1).text
- Exit For
- End If
- Next
- End With
- Next
- End With
- appExcel.Quit()
- appExcel = Nothing
- End If
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д