VB.net 匯入(excel)CSV or TXT 遇到格式不正確
在之前我們就知道如何把CSV轉入資料庫(SQL)中
我們知道CSV格式就是用逗點( ,)來區隔每個欄位,從逗號來讀取每個欄位
下面是基本範例
Dim Input As Object = Nothing
Input = My.Computer.FileSystem.OpenTextFieldParser(_CsvPath)
'=================開始讀取=================
If String.IsNullOrEmpty(_CsvPath) Then
Exit Sub
End If
'分隔符號是,號
Input.SetDelimiters(",")
'把資料讀進去ArrayList
Dim rows As New ArrayList()
'先把第一列Title讀掉
Dim title() As String
title = Input.ReadFields()
Try
While (Not Input.endofdata)
rows.Add(Input.ReadFields)
End While
Catch ex As Exception
End Try
在上面這段匯入ArrayList時是不會有錯誤的
但把每個欄位內容都匯入資料庫時不過我在匯入的過程中開始遇到困難
1.csv遇到資料不完整時,匯入資料庫會失敗
舉例來說資料內容如下,第三行的資料很明顯少了生日的內容
所以匯入的時候就會遇到錯誤了!
欄位1_客戶名稱,欄位2_性別,欄位3_生日
chang,女,2010/11/11
wang,男
'把ArrayList的資料塞進資料庫
For i As Integer = 0 To rows.Count - 1
Dim Record As New CustomerDO
Record.pCustomer=rows(i)(0)
Record.pGender =rows(i)(1)
Record.pBirthday = rows(i)(2)
Next
Input.close()
出現錯誤:索引在陣列的界限之外。
原本每個row的Length應該為3,在row(1) 的 Length只等於 2
解決方法:
'第一步先打開EXCEL重新另存CSV格式
Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
Const xlCSV = 6
xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
xlBook = xlApp.Workbooks.Open(_CsvPath) '讀取檔案
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
xlApp.DisplayAlerts = False
xlSheet.SaveAs(_CsvPath, xlCSV)
xlBook.Close(True)
xlApp.Quit()
xlApp = Nothing
存檔後再做一開始的步驟
這樣就可以避免格式錯誤囉!!
相關MSDN文章:HOW TO:在 Visual Basic 中從逗號分隔文字檔讀取
接著第二個問題
2.匯入中文遇到亂碼
解決方式:
Dim defaultEncoding As Encoding
defaultEncoding = Encoding.GetEncoding(950)
Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(_CsvPath, defaultEncoding)
Input = myReader
參考相關文章:開啟的文字檔是ASCII(或稱為ANSI)的文字檔,中文字的部份會變成亂碼
————————————————————————
lala