【问题标题】:vb.net export datagrid as excel some column data format lostvb.net export datagrid as excel 某些列数据格式丢失
【发布时间】:2014-11-05 04:32:26
【问题描述】:

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

(1) 数据网格结果:

(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)

错误是代码引起的吗?

【问题讨论】:

    标签: vb.net excel datagrid export


    【解决方案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""")
    

    【讨论】:

    • 您好 helrich,非常感谢您的回答。实际上导致问题的值真的是一个字符串。在保存到excel之前,我已经通过转换它(在变量前面添加单引号('))来修复它。在 excel 中,以单引号开头的值定义为字符串。
    • 你好 helrich,忘了告诉你转换代码很有用。
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多