Повторная загрузка из Excel в DataGridView вызывает ошибку - Visual Basic .NET
Формулировка задачи:
Данные загружаю из Excel в DataGridView2 все нормально.
Далее необходимо загрузить в DataGridView2 новый файл из Excel.
Предварительно чистим:
При повторной загрузке не выходя из формы вызывает ошибку строка: da.Fill(dtt) в этом коде:
Листинг программы
- ' Чистим Excel
- Dim xlp() As Process = Process.GetProcessesByName("EXCEL")
- For Each Process As Process In xlp
- Process.Kill()
- If Process.GetProcessesByName("EXCEL").Count = 0 Then
- Exit For
- End If
- Next
- ' Чистим DataGridView2
- DataGridView2.DataSource = Nothing
- Dim command As OleDb.OleDbCommand ' = connection.CreateCommand()
- Dim da As New OleDb.OleDbDataAdapter(command)
- dtt.Clear() ' Чистим datatable
- ' Загружаем в таблицу-DataGridView2 файл Excel
- LoadDataKey(My.Application.Info.DirectoryPath + "" + Label1.Text + ".xlsx", iShtName2)
Листинг программы
- Private Sub LoadDataKey(ByVal iPath As String, ByVal iShtName2 As String)
- ' Взять данные из Excel
- Dim connectionString As String
- Dim connection As OleDb.OleDbConnection
- Try
- 'Для Excel 12.0
- connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + iPath + "; Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
- connection = New OleDb.OleDbConnection(connectionString)
- connection.Open()
- Catch ex12 As Exception
- MsgBox("Не знаю такой версии Excel")
- End Try
- 'Выборка данных
- Dim command As OleDb.OleDbCommand = connection.CreateCommand()
- command.CommandText = "Select * From [Лист1$]"
- Dim da As New OleDb.OleDbDataAdapter(command)
- da.Fill(dtt)
Решение задачи: «Повторная загрузка из Excel в DataGridView вызывает ошибку»
textual
Листинг программы
- Public Class Form1
- Dim dtt As DataTable
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- 'Убрать тормоза таблицы
- GetType(Control).InvokeMember("DoubleBuffered", _
- System.Reflection.BindingFlags.SetProperty Or _
- System.Reflection.BindingFlags.Instance Or _
- System.Reflection.BindingFlags.NonPublic, _
- Nothing, _
- DataGridView1, _
- New Object() {True})
- With Me.DataGridView1 ' Параметры таблицы во 2 закладке
- .DataSource = Nothing
- .DataSource = LoadDataKey("путь к файлу", "имя листа")
- .AutoGenerateColumns = True
- .BorderStyle = BorderStyle.Fixed3D
- .EditMode = DataGridViewEditMode.EditOnEnter
- .AllowUserToOrderColumns = True
- .AllowUserToResizeColumns = True ' Возможность перетаскивать столбец
- .AllowUserToAddRows = False
- .RowHeadersWidth = 55 ' Ширина столбца заголовка, самый левый столбец
- ' Меняем высоту строки заголовков
- .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
- .ColumnHeadersHeight = 40
- .Columns(0).Width = 200 ' Задаем ширину 1 столбца
- .Columns(0).ReadOnly = True ' Делаем не редактируемым 1 столбец
- .Columns(1).Width = 50
- .Columns(2).Width = 80
- ' Выравнивание влево 1 столбца
- .Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
- ' Выравнивание по центру в столбце
- .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
- .Refresh()
- End With
- End Sub
- Private Function LoadDataKey(ByVal iPath As String, ByVal iShtName2 As String) As DataTable
- Using conn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & iPath & "; Extended Properties=""Excel 12.0 Xml; HDR=YES"";")
- Try : conn.Open() : Catch : MsgBox("Не знаю такой версии Excel") : Return Nothing : End Try
- Dim command As New OleDb.OleDbCommand("Select * From [" & iShtName2 & "$]", conn)
- Dim da As New OleDb.OleDbDataAdapter(command)
- dtt = New DataTable : da.Fill(dtt)
- conn.Close()
- Return dtt
- End Using
- End Function
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д