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

Excel导出日期格式错误,但仅适用于某些日期值,excel,vb.net,datetime,ms-access,export-to-excel,Excel,Vb.net,Datetime,Ms Access,Export To Excel,当使用vb.net从access导出到excel时,我正在将日期时间值格式化为日期 我有以下代码 Dim formatRange As Excel.Range formatRange = xlWorksheet.Range("C1", "C9999") formatRange.NumberFormat = "dd/MM/yyyy" formatRange = xlWorksheet.Range("D1", "D9999") formatRange.NumberFormat = "dd/MM/

当使用vb.net从access导出到excel时,我正在将日期时间值格式化为日期

我有以下代码

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

正如猜测的那样,您可以导出文本:

   xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value.ToString
这将强制在日期值的文本表达式上使用默认日期格式

日期值没有格式。因此,请插入以下值:

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

正如另一个答案中所建议的那样,简单地将
.Value
从DataGridView单元格推送到Excel单元格中可能很有诱惑力

xlsheet.Cells(i+2,j+1)=dgvExport(j,i).Value
。。。这种方法将在当前日期有效,它也将

  • 对于1900-03-01之前的日期,引入一个off-by-one错误,以及
  • 1899-12-30之前的日期完全失败
  • 一种更安全的方法是继续使用
    .ToString
    ,但强制其为明确的yyyy-mm-dd日期:

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

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

    日期几乎应始终格式化为年/月/日,所以yyyy/MM/dd@Fionnuala即使是英国日期?听起来好像不是按原样导出日期值,而是表示值的字符串。@Gustav在我的数据库中,它们保存为DateTime(然后显示在DataGridView中,从中获取并导出数据是的,但您的密码可能会困住您。您好,Gord,此信息很有用,如果前面的答案没有解决问题,那么我将使用此方法,但是此系统将永远不会遇到2016年之前的日期,因此不会出现问题。如果有,这可能是然而,在一个不同的程序中,我当然会考虑这个问题。