我们有一个页面将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()