我正在开发将excel导入mysql的程序。在应用程序中,用户首先必须加载一个excel文件,然后他将在DataGridView上看到该文件的加载。
问题在于,文件加载时会显示其他值,而不是excel值。
以下是excel文件中的一个示例,红色方块中的值为1,49 当Excel在DataTable> DataGridView中加载时,值为1,39 ...
这是我将Excel加载到DataGridView的方法,该dataGridView称为MetroGrid1
Private Sub Upload_Click(sender As Object, e As EventArgs) Handles BtnUpload.Click
Dim fd As OpenFileDialog = New OpenFileDialog()
Dim strFileName As String
fd.Title = "Seleziona file.."
fd.InitialDirectory = "C:\"
fd.Filter = "File Excel|*.xls;*.xlsx;*.xlsm"
fd.FilterIndex = 2
fd.RestoreDirectory = True
If fd.ShowDialog() = DialogResult.OK Then
strFileName = fd.FileName
TxtUpload.Text = ""
TxtUpload.Text = strFileName
Dim dt As New DataTable
Try
Dim constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
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)
MetroGrid1.DataSource = dt
For Each c As DataGridViewColumn In MetroGrid1.Columns
c.ReadOnly = True
c.SortMode = DataGridViewColumnSortMode.NotSortable
Next
PictureBox1.Visible = False
con.Close()
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Critical)
End Try
End If
End Sub
实际上,我认为该值是错误的,因为在Excel 1,49中是从公式= D2 *(1-0,01 * E2)*(1-0,01 * F2)* 2,44获得的问题如下,我该如何导入正确的值?
更新: 实际上,我已经发现了问题,客户端excel文件中的数据被格式化为0,09,因此1,39的值变为1,49,因此该值是正确的。
更新2 通过设置IMEX = 1和HDR = NO,我得到了正确的值,但是我仍然需要标题。
答案 0 :(得分:1)
问题在于excel中的值已格式化,因此它们不是数字。
解决方案是在OLEDB的连接字符串中将HDR设置为NO,将IMEX设置为1
无论如何我还是需要excel的标头,所以我在加载DataGridView源之前通过操作数据表来完成以下操作
Dim i As Integer = 0
For Each col As DataColumn In dt.Columns
col.ColumnName = dt.Rows(0)(i).ToString
i += 1
Next
dt.Rows.Remove(dt.Rows(0))
MetroGrid1.DataSource = dt