使用VB.Net在Datagridview中导入Excel数据

大家好,下午好。 我有一个程序在VB.Net导出数据到Datagridview这样的Excel文件

在这里输入图像说明

导出后,我将编辑Excel文件,并将其返回到我的Datagridview,但可悲的是这里是我的输出

在这里输入图像说明

正如你在这两张照片上看到的,他们是不同的。 没有逗号,没有小数位和列Total 0也被添加,但是假设它不是。

我的问题是如何在Excel中实现相同的格式? 将逗号和小数点放在数字列中,不要包含列Total00.00的行

所有我想要的是,我的Datagridview数据也是相同的格式在Excel中。

这是我在导入代码

  Dim conn As OleDbConnection Dim dta As OleDbDataAdapter Dim dts As DataSet Dim excel As String Dim OpenFileDialog As New OpenFileDialog OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments OpenFileDialog.Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls" If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then Dim fi As New FileInfo(OpenFileDialog.FileName) Dim FileName As String = OpenFileDialog.FileName excel = fi.FullName conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel + ";Extended Properties=Excel 12.0;") dta = New OleDbDataAdapter("Select * From [Sheet1$]", conn) dts = New DataSet dta.Fill(dts, "[Sheet1$]") DataGridView1.DataSource = dts DataGridView1.DataMember = "[Sheet1$]" conn.Close() With DataGridView1 .RowHeadersVisible = False .Columns(0).HeaderCell.Value = "Item Code" .Columns(1).HeaderCell.Value = "Description" .Columns(2).HeaderCell.Value = "Delivery Date" .Columns(3).HeaderCell.Value = "Stock On-Hand" .Columns(4).HeaderCell.Value = "Ordering Level" .Columns(5).HeaderCell.Value = "Order Qty" .Columns(6).HeaderCell.Value = "Approved Qty" .Columns(7).HeaderCell.Value = "UOM" .Columns(8).HeaderCell.Value = "Unit Price" .Columns(9).HeaderCell.Value = "Total" .Columns(10).HeaderCell.Value = "Remarks" End With DataGridView1.Columns.Item(0).Width = 70 DataGridView1.Columns.Item(1).Width = 180 DataGridView1.Columns.Item(2).Width = 70 DataGridView1.Columns.Item(3).Width = 70 DataGridView1.Columns.Item(4).Width = 70 DataGridView1.Columns.Item(5).Width = 70 DataGridView1.Columns.Item(6).Width = 70 DataGridView1.Columns.Item(7).Width = 61 DataGridView1.Columns.Item(8).Width = 76 DataGridView1.Columns.Item(9).Width = 86 DataGridView1.Columns.Item(10).Width = 125 DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter For Each row As DataGridViewRow In DataGridView1.Rows row.Cells("Total").Value = row.Cells("Order Qty").Value * row.Cells("Unit Price").Value Next Dim total As Double = 0 For i As Integer = 0 To DataGridView1.RowCount - 1 total += DataGridView1.Rows(i).Cells(9).Value Next TextBox7.Text = total addnewnewandrefresh() DELETEROW() Else Dim con1 As MySqlConnection = New MySqlConnection("server=localhost;userid=root;password=admin1950;database=inventory") Dim sql1 As MySqlCommand = New MySqlCommand("select ItemCode,Description,DeliveryDate,StockOnHand,OrderingLevel,OrderQty,ApprovedQty,UoM,UnitPrice,Total,Remarks from final_purch where PRNumber = '" & TextBox1.Text & "';", con1) Dim ds1 As DataSet = New DataSet Dim adapter1 As MySqlDataAdapter = New MySqlDataAdapter con1.Open() adapter1.SelectCommand = sql1 adapter1.Fill(ds1, "MyTable") DataGridView1.DataSource = ds1.Tables(0) con1.Close() With DataGridView1 .RowHeadersVisible = False .Columns(0).HeaderCell.Value = "Item Code" .Columns(1).HeaderCell.Value = "Description" .Columns(2).HeaderCell.Value = "Delivery Date" .Columns(3).HeaderCell.Value = "Stock On-Hand" .Columns(4).HeaderCell.Value = "Ordering Level" .Columns(5).HeaderCell.Value = "Order Qty" .Columns(6).HeaderCell.Value = "Approved Qty" .Columns(7).HeaderCell.Value = "UOM" .Columns(8).HeaderCell.Value = "Unit Price" .Columns(9).HeaderCell.Value = "Total" .Columns(10).HeaderCell.Value = "Remarks" End With DataGridView1.Columns.Item(0).Width = 70 DataGridView1.Columns.Item(1).Width = 180 DataGridView1.Columns.Item(2).Width = 70 DataGridView1.Columns.Item(3).Width = 70 DataGridView1.Columns.Item(4).Width = 70 DataGridView1.Columns.Item(5).Width = 70 DataGridView1.Columns.Item(6).Width = 70 DataGridView1.Columns.Item(7).Width = 61 DataGridView1.Columns.Item(8).Width = 76 DataGridView1.Columns.Item(9).Width = 86 DataGridView1.Columns.Item(10).Width = 125 DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter With Me.DataGridView1 .RowsDefaultCellStyle.BackColor = Color.WhiteSmoke .AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender End With MsgBox("Importing Data has been Cancelled") End If 

TYSM为未来的帮助

尝试这个:

首先导入时,我看到你正在创build列名称。 没有必要这样做。 在扩展属性集DHR =是。 这将从excel中获取列名。 也:

使用IMEX = 1来避免崩溃。

总是使用IMEX = 1是一种更安全的方式来检索混合数据列的数据。 考虑一个Excel文件可能正常工作的情况,因为该文件的数据会导致驱动程序猜测一个数据types,而另一个包含其他数据的文件会导致驱动程序猜测另一个数据types。 这可能会导致您的应用程序崩溃,特别是如果您正在编辑Excel文件。

 ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'; 

你需要使用单元格格式的数字例如:defaultcellstyle.format =“N2”