vb.net导出datagrid为excel某些列数据格式丢失

时间:2014-09-11 09:29:41

标签: vb.net excel datagrid export

我正在使用vb.net生成数据网格,并且基于datagrid我有一个函数允许用户将datagrid值导出到excel中。奇怪的是我的一个字符串列值非常奇怪:

(1)datagrid结果:

enter image description here

(2)仅在导出之后 - BQ SEGMENT数据很奇怪且与数据网格中的数据不同:

enter image description here

(3)我将“BQ SEGMENT”的格式更改为一般或文本 - 结果也是奇怪和错误

enter image description here

我的导出代码为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)

代码是否导致错误?

1 个答案:

答案 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""")