Excel导出date格式出错,但仅限于某些date值

我使用vb.net将我的date时间值格式化为从access to excel导出时的date。

我有以下代码

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" 

这适用于我的数据库中的大多数date,但是,其中一些仍然显示00:00:00的时间部分,我认为当date高于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 

这将强制您的文本expression式的date值的默认date格式。

date值不包含格式。 所以插入值:

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

虽然它可能是诱人的简单地将DataGridView单元格中的.Value推入到另一个答案中推荐的Excel单元格中。

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

…这种方法将适用于当前的date,它也会

  1. 为1900-03-01之前的date引入一个错误的bug
  2. 在1899-12-30之前的date完全失败。

更安全的方法是继续使用.ToString ,但强制它是一个明确的yyyy-mm-dddate:

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

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