VB.net 匯入(excel)CSV or TXT 遇到格式不正確

  • 9873
  • 0
  • 2012-10-26

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
存檔後再做一開始的步驟
這樣就可以避免格式錯誤囉!! 
 
 
 
接著第二個問題
2.匯入中文遇到亂碼
解決方式:
 
  Dim defaultEncoding As Encoding
        defaultEncoding = Encoding.GetEncoding(950)
        Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(_CsvPath, defaultEncoding)
        Input = myReader
參考相關文章:開啟的文字檔是ASCII(或稱為ANSI)的文字檔,中文字的部份會變成亂碼

 

————————————————————————

lala