【发布时间】:2017-07-12 10:07:25
【问题描述】:
我在我的程序中编写了一个导出到 excel 的函数,这也与一个导入程序相吻合。
导入程序正在运行一些验证检查,但其中一些检查失败,因为 Excel 工作表将它们格式化为 MM/dd/yyyy,但其中大部分存储为 dd/MM/yyyy。
查看我的导出程序后,我可以看到在网格中,在导出之前,日期都正确格式化为 dd/MM/yyyy,所以问题不在这里。
打开导出的 Excel 文件时,我可以看到某些日期存储为 MM/dd/yyyy。
我电脑上的区域设置是正确的,设置为英国,即使在检查列上的 Excel 格式后,我也可以看到它设置为 dd/MM/yyyy。
那么,可能出了什么问题?为什么有些导出方式不同?
在网格中看到的值(正确的格式 - 请参阅前 2 行“Rate One Start”,2016 年 1 月 6 日)
导出例程中的代码
Dim formatRange As Excel.Range
formatRange = xlWorksheet.Range("F2", "F99000")
formatRange.NumberFormat = "dd/MM/yyyy"
formatRange = xlWorksheet.Range("I1", "I99000")
formatRange.NumberFormat = "dd/MM/yyyy"
formatRange = xlWorksheet.Range("J1", "J99000")
formatRange.NumberFormat = "dd/MM/yyyy"
formatRange = xlWorksheet.Range("M1", "M99000")
formatRange.NumberFormat = "dd/MM/yyyy"
formatRange = xlWorksheet.Range("N1", "N99000")
formatRange.NumberFormat = "dd/MM/yyyy"
formatRange = xlWorksheet.Range("Q1", "Q99000")
formatRange.NumberFormat = "dd/MM/yyyy"
For k As Integer = 1 To dgvExport.Columns.Count
xlWorksheet.Cells(1, k) = dgvExport.Columns(k - 1).HeaderText
Next
Dim eStr As String = ""
Dim nStr As String = ""
Me.Cursor = Cursors.WaitCursor
For i = 0 To dgvExport.RowCount - 1
For j = 0 To dgvExport.ColumnCount - 1
Try
eStr = Trim(dgvExport(j, i).Value)
nStr = eStr.Replace(vbCr, "").Replace(vbLf, "")
xlWorksheet.Cells(i + 2, j + 1) = nStr
Catch
xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value
End Try
Next
Next
我导出的 Excel 文件(注意有些日期是 dd/MM,而有些是 MM/dd)
【问题讨论】:
-
确保将日期作为日期数据类型传递给 Excel。目前,您将它们作为字符串传递,我认为 Excel OM 会说美国语,因此在转换为真正的 Excel 日期时需要 m/d/y 顺序。
-
@jkpieterse 我将如何将它们作为日期传递?奇怪的是有些格式正确,但不是全部
-
@David 不奇怪。 VBA 正在使用 US (MDY) 格式进行转换。您认为正确的日期实际上是前两位数字>12 的文本字符串。由于 VBA 根据美国设置转换您的数据,其他人已被错误地转换 - 查看第一行 -
1-jun-16vs6-Jan-16。不确定vb.net日期与字符串。