簡體   English   中英

導出到Excel時更改日期格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM