2016-11-29 77 views
1

我正在使用vb.net將我的日期時間值格式化爲從access to excel導出時的日期。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() 
+0

日期應該幾乎總是格式化爲年/月/日,所以yyyy/MM/dd – Fionnuala

+0

@Fionnuala即使英國的日期? – Harambe

+0

聽起來好像你不會導出日期值_as is_,而是表示值的字符串。 – Gustav

回答

1

由於猜到了,你導出的文本:

xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value.ToString 

這將迫使對你的文字表達你的默認日期格式日期值。

日期值不包含任何格式。所以插入值:

xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value 
1

雖然它可能是誘人簡單地從DataGridView的單元格到Excel單元格推.Value作爲另一個答案建議...

xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, i).Value 

...而且這種方法也適用於當前日期,它也將

  1. 引入1900-03-01之前的日期和
  2. 在1899-12-30之前的日期完全失敗。

一個更安全的方法是繼續使用.ToString,但強制它是一個明確的YYYY-MM-DD日期:

xlWorksheet.Cells(i + 2, j + 1) = Convert.ToDateTime(dgvExport(j, i).Value).ToString("yyyy-MM-dd") 

這將保證正確的日期插入Excel單元格,而生成日期格式將通過Excel中的顯式單元格格式或Windows控制面板的區域設置中指定的默認格式應用。

+0

嗨戈德,這個信息是有用的,如果以前的答案沒有解決問題,那麼我'使用這種方法,但是這個系統將不會遇到2016年之前的日期,所以這個問題不會出現。但是,如果在不同的程序中可能出現這種情況,那麼我一定會考慮這一點 – Harambe