我正在使用vb.net生成数据网格,并且基于datagrid我有一个函数允许用户将datagrid值导出到excel中。奇怪的是我的一个字符串列值非常奇怪:
(1)datagrid结果:
(2)仅在导出之后 - BQ SEGMENT数据很奇怪且与数据网格中的数据不同:
(3)我将“BQ SEGMENT”的格式更改为一般或文本 - 结果也是奇怪和错误
我的导出代码为excel:
Dim xlApp As Excel.Application
Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim i As Integer
Dim j As Integer
xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets("sheet1")
For i = 0 To DataGridView1.RowCount - 2
For j = 0 To DataGridView1.ColumnCount - 1
For k As Integer = 1 To DataGridView1.Columns.Count
xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString()
Next
Next
Next
Dim saveFileDialog1 As New SaveFileDialog
saveFileDialog1.Filter = "Excel File|*.xlsx"
saveFileDialog1.Title = "Save an Excel File"
saveFileDialog1.ShowDialog()
xlApp.ScreenUpdating = True
xlApp.Visible = False
If Not saveFileDialog1.FileName.Equals("") Then
xlApp.DisplayAlerts = False
xlWorkSheet.SaveAs(saveFileDialog1.FileName)
MsgBox("The data has been successfully export as excel file.")
End If
xlWorkBook.Close()
xlApp.Quit()
xlApp = Nothing
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
代码是否导致错误?
答案 0 :(得分:1)
您的原始日期格式非常奇怪。我猜1988 / 03-1是1988年1月3日?所以基本上你的问题不是数据本身,而是Excel中的格式。第三个示例显示Excel如何在内部表示日期,十进制值,其中1.0是1900年1月1日,从那时起每天添加1。数字的小数部分(小数点后)保存时间信息(您的数据没有)。
无论如何,如果您右键单击该日期列并选择"格式化单元格...",您将能够指定您希望日期使用的格式。这将因用户/机器而异。另一个选项是,在导出for
循环中,使用您指定的格式将日期列的值解析为字符串,并以这样的方式修饰值,使Excel将值视为字符串,而不是DateTime(添加=
并将值括在双引号中):
xlWorkSheet.Cells(i + 2, j + 1) = _
DateTime.Parse(DataGridView1(j, i).Value.ToString()) _
.ToString("=""yyyy/dd-M""")