[英]Date Format Changing when Exporting to Excel
我已經在程序中編寫了一個導出到excel函數的程序,這也與導入程序一致。
導入程序正在運行一些驗證檢查,但其中一些檢查失敗,因為Excel工作表將其格式化為MM / dd / yyyy,但是大多數存儲為dd / MM / yyyy。
在查看導出程序后,可以看到在網格中,在導出之前,日期都被正確地設置為dd / MM / yyyy格式,因此問題不在這里。
打開導出的Excel文件時,我可以看到某些日期存儲為MM / dd / yyyy。
我的電腦上的區域設置是正確的,設置為UK,即使檢查了列上的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)
正如@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
這意味着,如果要評估的當前列的索引不是包含日期的列之一,則照常導出它,但是如果是,則將其轉換為日期時間,其格式與日期相同線程的當前區域性格式。
這就像做夢一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.