使用VB.Net在Datagridview中导入Excel数据
大家好,下午好。 我有一个程序在VB.Net导出数据到Datagridview这样的Excel文件
导出后,我将编辑Excel文件,并将其返回到我的Datagridview,但可悲的是这里是我的输出
正如你在这两张照片上看到的,他们是不同的。 没有逗号,没有小数位和列Total
0
也被添加,但是假设它不是。
我的问题是如何在Excel中实现相同的格式? 将逗号和小数点放在数字列中,不要包含列Total
为0
或0.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”