У меня проблема с приведенным ниже кодом, который зависает и ничего не делает во время работы.
ИНФРАСТРУКТУРА: Visual Studio 2017 .NET Framework 4.7.2 ОС: Windows 7
ЦЕЛЬ: У меня естьDataGridView, который имеет 3 столбца, я перечисляю некоторую информацию в этом DataGridView из другого источника, чтобы заполнить первую и вторую строку.
Первая строка - это имя параметра, а вторая - текущее значение этого параметра.
Третий столбец не заполняет этот процесс, я заполню 3-й столбец из файла Excel моей базы данных.сравнить текущее значение параметра со значением базы данных, хранящимся в Excel.Именно здесь начинаются мои проблемы.
Я пытаюсь использовать приведенный ниже код для заполнения значения параметра DataGridView из листа Excel, для которого я использую базу данных;
Некоторые параметры не сохраняются в Excelна самом деле, мне нужна функция типа vlookup для сопоставления данных с именем параметра.
В Excel столбец - это имя моего параметра, а столбец B - значение базы данных параметра.
I 'Я пытаюсь импортировать этот Excel и пытаться сопоставить имена параметров в DataGridView и Excel, если имя параметра совпадает, следует записать значение параметра Excel в 3-й столбец в DataGridView.
Public Class BuildImportExcel
Public Shared Sub NewMethod(ByVal dgv As DataGridView)
Dim ofd As OpenFileDialog = New OpenFileDialog With {
.Filter = "Excel |*.xlsx",
.Title = "Import Excel File"
}
ofd.ShowDialog()
Try
If ofd.FileName IsNot "" Then
Dim xlApp As New Excel.Application
If xlApp Is Nothing Then
MessageBox.Show("Excel is not properly installed!")
Else
Dim xlBook As Excel.Workbook = xlApp.Workbooks.Open(ofd.FileName)
Dim xlSheet As Excel.Worksheet = CType(xlBook.ActiveSheet, Excel.Worksheet)
For i = 0 To dgv.Rows.Count
If dgv.Rows(i).Cells(0).Value IsNot "" Then
Dim look As Boolean = True
Dim found As Boolean = False
Dim rowLook As Integer = 2
Dim rowFound As Integer = 0
While look = True
If xlSheet.Range("A" & rowLook).Value IsNot "" Then
If xlSheet.Range("A" & rowLook).Text Is dgv.Rows(i).Cells(0).Value Then
found = True
rowFound = rowLook
End If
Else
look = False
End If
rowLook = rowLook + 1
End While
If found = True Then
dgv.Rows(i).Cells(2).Value = xlSheet.Range("B" & rowFound).Text
End If
End If
Next
xlApp.Quit()
Release(xlSheet)
Release(xlBook)
Release(xlApp)
End If
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Shared Sub Release(ByVal sender As Object)
Try
If sender IsNot Nothing Then
Marshal.ReleaseComObject(sender)
sender = Nothing
End If
Catch ex As Exception
sender = Nothing
End Try
End Sub
End Class
Но проблема заключается не в том,Работая замораживание Я думал, что список параметров около 200 строк, поэтому он вызывает замораживание и попробуйте его небольшими порциями, как 5 параметров и все тот же.Кажется, что-то не так, и я не смог найти это.
Также это логический способ сопоставить их с этим методом, или вы предлагаете что-то вроде соединения OLEDB?
РЕДАКТИРОВАТЬ: я отключаю Option Strict и затем меняю IsNot на operator <>, а затемначать работать, но я хотел бы использовать Option Strict Как я могу обработать эти операторы?