OleDB将错误的行解释为XLS / XLSX文件中的标题

时间:2017-07-14 18:40:48

标签: excel vb.net oledb

我们有一个页面将XLS,XLSX和CSV文件解释为数据表,并将它们上传到我们的数据库。

然而,有时用户无法上传文件,因为它将错误的行解释为标题。最近的例子是解释标题中的第178行。我尝试将其保存为CSV,这样我就可以在记事本中查看它,但无法找到任何特殊字符或该行中发生的任何事情。

要正确上传,我只需要将数据复制并粘贴到另一个excel文件中或将其另存为CSV。但这显然不是我们希望用户采取的步骤。

这里可能会发生什么,我们如何防止这种情况发生?

以下是我使用的代码:

    Dim connstring As String
    If ext = ".XLSX" Then
        connstring = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & infile & ";Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1;"""
    ElseIf ext = ".XLS" Then
        connstring = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & infile & ";Extended Properties=""Excel 8.0;HDR=YES;"""
    Else
        connstring = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & sFilePath & ";Extended Properties=""text;HDR=YES;FMT=Delimited(,);"""
    End If
    Dim olecon As OleDbConnection
    Dim olecomm As OleDbCommand

    Dim oleadpt As OleDbDataAdapter
    Dim ds As DataSet
        olecon = New OleDbConnection
        olecon.ConnectionString = connstring
        olecomm = New OleDbCommand


        olecomm.Connection = olecon

        oleadpt = New OleDbDataAdapter(olecomm)
        ds = New DataSet
        olecon.Open()

        If ext = ".CSV" Then
            olecomm.CommandText = String.Format("Select * from [{0}]", sFilename)
        Else
            Dim sheetName As String = olecon.GetSchema("Tables").Rows(0)("TABLE_NAME")
            olecomm.CommandText = String.Format("Select * from [{0}]", sheetName)
        End If

        oleadpt.Fill(ds, "Sheet1")

        Dim dt As New DataTable("FileTable")
        dt = ds.Tables(0)

        For Each col As DataColumn In dt.Columns
            col.ColumnName = col.ColumnName.Trim()
        Next

        olecon.Close()

0 个答案:

没有答案