Поиск и добавление записей в Excel - Visual Basic .NET
Формулировка задачи:
Всем доброго времени суток)
стоит такая задача:
На форме есть кнопка и текстовое поле. В текстовое поле вводиться значение.
Есть документ Excel c листом1 формата:
столбец А Столбец B
консервы 6
бананы 8
молоко 2
Необходимо при нажатии на кнопку произвести поиск этого значения по столбцу А листа 1.
Если такого значения нет, то вписать его в конец списка и в столбец B проставить 1, а если еть то в столбец b прибавить 1
например, в текстовое поле введено : кефир
программа не нашла его в списке и в конец списка добавляет:
столбец А Столбец B
кефир 1
или же в текстовое поле введено бананы, программа приплюсовывет 1 напротив бананов, то есть их будет 9
Заранее спасибо за понимание и помощь!
Решение задачи: «Поиск и добавление записей в Excel»
textual
Листинг программы
Public Class Form1
Dim DT As DataTable
Dim APP, WB, WS As Object
Dim FPath As String = Application.StartupPath & "\Book1.xls"
Private Sub btnLoad_Click(sender As Object, e As EventArgs) Handles btnLoad.Click
getDT(FPath, "Sheet1")
DGV1.DataSource = DT
End Sub
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
For i = 0 To DT.Rows.Count - 1
If DT.Rows(i)(0) = CB1.Text Then
DT.Rows(i)(1) = TB1.Text
DGV1.DataSource = DT
Exit Sub
End If
Next
DT.Rows.Add(CB1.Text, TB1.Text)
DGV1.DataSource = DT
CB1.Items.Clear()
CB1.Items.AddRange((From Row In DT.Rows Select Row(0)).ToArray)
End Sub
Private Sub CB1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CB1.SelectedIndexChanged
For Each row As DataRow In DT.Rows
If row(0) = CB1.Text Then
TB1.Text = row(1)
End If
Next
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
saveDT(FPath, "Sheet1")
End Sub
Private Sub DGV1_SelectionChanged(sender As Object, e As EventArgs) Handles DGV1.SelectionChanged
CB1.SelectedItem = DGV1.CurrentRow.Cells(0).Value
TB1.Text = DGV1.CurrentRow.Cells(1).Value
End Sub
Sub getDT(FilePath As String, WorksheetName As String)
DT = New DataTable
APP = CreateObject("Excel.Application")
WB = APP.Workbooks.Open(FilePath)
WS = WB.Worksheets(WorksheetName)
APP.Visible = False
APP.ScreenUpdating = False
APP.DisplayAlerts = False
Dim LastRowIndex = WS.Cells(WS.Rows.Count, 1).End(-4162).Row
With DT
.Columns.Add("Name")
.Columns.Add("Quantity")
For i = 1 To LastRowIndex
.Rows.Add(WS.Range("A" & i).Value, WS.Range("B" & i).Value)
Next
End With
APP.Quit() : releaseObject(APP)
CB1.Items.AddRange((From Row In DT.Rows Select Row(0)).ToArray)
CB1.SelectedIndex = 0
End Sub
Sub saveDT(FilePath As String, WorksheetName As String)
APP = CreateObject("Excel.Application")
WB = APP.Workbooks.Open(FilePath)
WS = WB.Worksheets(WorksheetName)
APP.Visible = False
APP.ScreenUpdating = False
APP.DisplayAlerts = False
For i = 0 To DT.Rows.Count - 1
WS.Range("A" & i + 1).Value = DT.Rows(i)(0)
WS.Range("B" & i + 1).Value = DT.Rows(i)(1)
Next
WB.close(True) : APP.Quit() : releaseObject(APP)
MsgBox("готово")
End Sub
Public 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
End Class