Excel导出日期格式设置出错,但仅适用于某些日期值

时间:2016-11-29 11:19:40

标签: excel vb.net datetime ms-access export-to-excel

我在使用vb.net从访问权限导出时将我的日期时间值格式化为日期。

我有以下代码

Dim formatRange As Excel.Range

formatRange = xlWorksheet.Range("C1", "C9999")
formatRange.NumberFormat = "dd/MM/yyyy"

formatRange = xlWorksheet.Range("D1", "D9999")
formatRange.NumberFormat = "dd/MM/yyyy"

这适用于我的数据库中的大多数日期,但是,其中一些仍然显示时间部分为00:00:00,我认为当日期高于20时..

为什么会这样,我该如何解决?

编辑

我的完整代码是:

Dim sPath As String = sDt.Rows(0).Item("excelPath")
Dim i, j As Integer

Dim xlapp As Excel.Application
Dim xlWorkbook As Excel.Workbook
Dim xlWorksheet As Excel.Worksheet
Dim misvalue As Object = Reflection.Missing.Value

xlapp = New Excel.Application
xlWorkbook = xlapp.Workbooks.Add(misvalue)
xlWorksheet = xlWorkbook.Sheets.Add
xlWorksheet.Name = "CommissionInformation"

Dim formatRange As Excel.Range

formatRange = xlWorksheet.Range("C1", "C9999")
formatRange.NumberFormat = "dd/MM/yyyy"

formatRange = xlWorksheet.Range("D1", "D9999")
formatRange.NumberFormat = "dd/MM/yyyy"

For k As Integer = 1 To dgvExport.Columns.Count
     xlWorksheet.Cells(1, k) = dgvExport.Columns(k - 1).HeaderText
Next

For i = 0 To dgvExport.RowCount - 1
  For j = 0 To dgvExport.ColumnCount - 1
       xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value.ToString
  Next
Next

xlWorksheet.Columns.AutoFit()

2 个答案:

答案 0 :(得分:1)

如猜测的那样,导出文字:

   xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value.ToString

这将强制您的文本表达式的默认日期格式为日期值。

日期值不带格式。所以插入值:

   xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value

答案 1 :(得分:1)

虽然可能很容易将.Value从DataGridView单元格推送到另一个答案中建议的Excel单元格中...

xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value

......并且该方法适用于当前日期,它也将

  1. 为1900-03-01之前的日期和
  2. 引入了一个错误的错误
  3. 在1899-12-30之前的日期完全失败。
  4. 更安全的方法是继续使用.ToString,但强制它是一个明确的yyyy-mm-dd日期:

    xlWorksheet.Cells(i + 2, j + 1) = Convert.ToDateTime(dgvExport(j, i).Value).ToString("yyyy-MM-dd")
    

    这将确保将正确的日期插入到Excel单元格中,而生成的日期格式将通过Excel中的显式单元格格式应用,或者通过在Windows控制面板的“区域设置”中指定的默认格式。