Как заполнить данные только если столбец не пустой (OLEDB EXCEL) - PullRequest
0 голосов
/ 14 октября 2019

На самом деле у меня есть программа, в которую я импортирую файлы Excel в базу данных MySQL

Но я застрял на некоторых файлах Excel, которые не импортируются должным образом, фактически после выбора файла Excel я загружаю его в DataGridViewно в некоторых файлах Excel, вероятно, есть некоторые отформатированные пустые ячейки , поэтому, когда есть только 3 столбца с данными, загружаются как 300 столбцов, из которых 297 пусты

Так есть ли способ заполнитьDataTable, пропуская пустые ячейки / пустые столбцы?

Вот мой метод, в котором я создаю dataGridView (для HDR сознательно установлено значение no)

 Private Sub CreateDataGrid(ByRef strFileName As String)


        TxtUpload.Text = ""
        TxtUpload.Text = strFileName.Remove(0, strFileName.LastIndexOf("\") + 1)
        TxtUpload.Tag = strFileName

        Dim dt As New DataTable
        Try

            'IMEX = 1 e HDR = NO prende i dati formattati ed esatti dal file EXCEL
            Dim constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileName & ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1"""
            Dim con As New OleDbConnection(constring & "")

            con.Open()

            Dim myTableName = con.GetSchema("Tables").Rows(0)("TABLE_NAME")


            Dim sqlquery As String = String.Format("SELECT * FROM [{0}]", myTableName)
            Dim da As New OleDbDataAdapter(sqlquery, con)
            da.Fill(dt)

            Dim i As Integer = 0
            For Each col As DataColumn In dt.Columns
                If dt.Rows(0)(i).ToString <> "" Then
                    col.ColumnName = dt.Rows(0)(i).ToString
                    i += 1
                Else
                    i += 1
                    Continue For
                End If

            Next
            dt.Rows.Remove(dt.Rows(0))

            MetroGrid1.DataSource = dt
            For Each c As DataGridViewColumn In MetroGrid1.Columns
                c.ReadOnly = True
                c.SortMode = DataGridViewColumnSortMode.NotSortable
            Next

            MetroGrid1.SelectionMode = DataGridViewSelectionMode.CellSelect
            PictureBox1.Visible = False


            con.Close()
        Catch ex As Exception
            MsgBox(Err.Description, MsgBoxStyle.Critical)
        End Try
    End Sub

1 Ответ

0 голосов
/ 14 октября 2019

попробуйте изменить строку оператора запроса на что-то вроде этого:

Dim sqlquery As String = String.Format("SELECT * FROM [{0}] WHERE column IS NOT NULL", myTableName)

адаптируйте ее к формату, который вы используете в своих файлах Excel.

Ваша переменная sqlquery будет отвечатьдля того, что будет содержать ваш DataTable, так что здесь вы можете отфильтровать ваши данные, как вы хотите.

...