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,它也会
- 为1900-03-01之前的date引入一个错误的bug
- 在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控制面板的区域设置中指定的默认格式应用。