gpt4 book ai didi

excel - 导出到 Excel 时更改日期格式

转载 作者:行者123 更新时间:2023-12-04 21:34:35 26 4
gpt4 key购买 nike

我在我的程序中编写了一个导出到 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 日)

enter image description here

导出例程中的代码

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)

enter image description here

最佳答案

正如@jkpieterse 所建议的,我只需要将日期值作为实际日期数据类型传递。为此,我修改了 For Each循环。

原来的:

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

工作版本:
For i = 0 To dgvExport.RowCount - 1
For j = 0 To dgvExport.ColumnCount - 1
Try
If j <> 5 AndAlso j <> 8 AndAlso j <> 9 AndAlso j <> 12 AndAlso j <> 13 AndAlso j <> 16 Then
eStr = Trim(dgvExport(j, i).Value)
nStr = eStr.Replace(vbCr, "").Replace(vbLf, "")
xlWorksheet.Cells(i + 2, j + 1) = nStr
Else
xlWorksheet.Cells(i + 2, j + 1) = Convert.ToDateTime(dgvExport(j, i).Value).GetDateTimeFormats(Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat)
End If
Catch
xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value
End Try

Next
Next

这意味着,如果正在评估的当前列的索引不是包含日期的列之一,则将其正常导出,但如果是,则将其转换为日期时间,其格式与线程的当前文化格式。

这就像做梦一样。

关于excel - 导出到 Excel 时更改日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com