gpt4 book ai didi

mysql - Excel 到 DataTable 导入错误值

转载 作者:行者123 更新时间:2023-11-29 07:18:35 26 4
gpt4 key购买 nike

我正在开发一个将 excel 导入 mysql 的程序。在应用程序中,用户首先必须加载一个 excel 文件,然后他将在 DataGridView 上看到该文件加载。

问题是加载文件时它显示其他值而不是 excel 值。

这是 excel 文件中的一个例子,红色方 block 中的值为 1,49 enter image description here当在 DataTable > DataGridView 中加载 excel 时,它是 1,39 ... enter image description here

这是我将 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,我得到了正确的值,但我仍然需要 header 。

最佳答案

问题是 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

关于mysql - Excel 到 DataTable 导入错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57773769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com