2014-09-11 139 views
0

我正在使用vb.net生成一個datagrid,並基於datagrid我有一個函數允許用戶導出到excel的datagrid值。奇怪的是我的字符串列值的一個很奇怪:vb.net導出datagrid爲excel某些列數據格式丟失

(1)數據網格的結果:

enter image description here

(2)只有出口後 - 的BQ段數據很奇怪,並從不同什麼在DataGrid:

enter image description here

(3)I 「BQ段」 的單元格的格式更改爲一般或文本 - 結果也怪錯

enter image description here

我出口爲Excel代碼:

Dim xlApp As Excel.Application 
    Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook 
    Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet 
    Dim misValue As Object = System.Reflection.Missing.Value 
    Dim i As Integer 
    Dim j As Integer 

    xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass 
    xlWorkBook = xlApp.Workbooks.Add(misValue) 
    xlWorkSheet = xlWorkBook.Sheets("sheet1") 


    For i = 0 To DataGridView1.RowCount - 2 
     For j = 0 To DataGridView1.ColumnCount - 1 
      For k As Integer = 1 To DataGridView1.Columns.Count 
       xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText 
       xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString() 
      Next 
     Next 
    Next 

    Dim saveFileDialog1 As New SaveFileDialog 
    saveFileDialog1.Filter = "Excel File|*.xlsx" 
    saveFileDialog1.Title = "Save an Excel File" 
    saveFileDialog1.ShowDialog() 

    xlApp.ScreenUpdating = True 
    xlApp.Visible = False 

    If Not saveFileDialog1.FileName.Equals("") Then 
     xlApp.DisplayAlerts = False 
     xlWorkSheet.SaveAs(saveFileDialog1.FileName) 
     MsgBox("The data has been successfully export as excel file.") 
    End If 

    xlWorkBook.Close() 
    xlApp.Quit() 
    xlApp = Nothing 

    releaseObject(xlApp) 
    releaseObject(xlWorkBook) 
    releaseObject(xlWorkSheet) 

由代碼造成的錯誤?

回答

1

您的原始日期格式非常奇怪。我猜1988/03-1是1988年1月3日?所以基本上你的問題不是數據本身,而是Excel中的格式。第三個例子顯示Excel如何在內部表示日期,其中1.0是1900年1月1日的十進制值,此後每天增加1。數字的小數部分(小數點後)包含時間信息(您的數據不包含)。無論如何,如果您要右鍵單擊該日期列並選擇「格式單元格...」,您將能夠指定希望使用日期的格式。這將從一個用戶/機器到下一個不同。另一種選擇是,在導出for循環中,使用您指定的格式將日期列的值解析爲字符串,然後修改值以使Excel將值視爲字符串,而不是日期時間(添加=並用雙引號括起來):

xlWorkSheet.Cells(i + 2, j + 1) = _ 
    DateTime.Parse(DataGridView1(j, i).Value.ToString()) _ 
    .ToString("=""yyyy/dd-M""") 
+0

嗨赫裏奇,非常感謝你的回答。事實上,價值導致問題真的是一個字符串。我通過轉換它(在變量前添加單引號('))來修復它,然後保存到excel中。在Excel中,以單引號開頭的值被定義爲字符串。 – user30643 2014-09-12 06:05:35

+0

嗨亥裏奇,忘了告訴你,轉換代碼是有用的。 – user30643 2014-09-12 06:18:03