Excel 导出日期格式出错,但仅针对某些日期值
Excel export date formatting goes wrong, but only for some date values
我使用 vb.net.
从访问 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 单元格 ...
xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value
...并且该方法适用于当前日期,它也将
- 为 1900 年 3 月 1 日之前的日期引入一个差一错误,并且
- 对于 1899-12-30 之前的日期完全失败。
一种更安全的方法是继续使用 .ToString
,但强制它成为明确的 yyyy-mm-dd 日期:
xlWorksheet.Cells(i + 2, j + 1) = Convert.ToDateTime(dgvExport(j, i).Value).ToString("yyyy-MM-dd")
这将确保将正确的日期 value 插入到 Excel 单元格中,而结果日期 format 将通过 Excel 中的显式单元格格式设置或通过 Windows 控制面板的区域设置中指定的默认格式设置应用。
我使用 vb.net.
从访问 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 单元格 ...
xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value
...并且该方法适用于当前日期,它也将
- 为 1900 年 3 月 1 日之前的日期引入一个差一错误,并且
- 对于 1899-12-30 之前的日期完全失败。
一种更安全的方法是继续使用 .ToString
,但强制它成为明确的 yyyy-mm-dd 日期:
xlWorksheet.Cells(i + 2, j + 1) = Convert.ToDateTime(dgvExport(j, i).Value).ToString("yyyy-MM-dd")
这将确保将正确的日期 value 插入到 Excel 单元格中,而结果日期 format 将通过 Excel 中的显式单元格格式设置或通过 Windows 控制面板的区域设置中指定的默认格式设置应用。