1

我正在使用 VB.Net 的网站上进行重新设计。系统会从第三方上传的 Excel 97-2003 文件中获取相当多的数据,然后上传到 SQL 2008。问题来了,上传的文件扩展名为 .P。我使用下面的代码来尝试抓取数据并上传到数据库。

Dim xlApp As New Excel.Application
    xlApp.Workbooks.Open(Filename:=Server.MapPath("~/ExtractFiles/10-31-13.P"))
    xlApp.ActiveWorkbook.SaveAs(Filename:=Server.MapPath("~/ExtractFiles/10-31-13.xls"), FileFormat:=51)
    If Not xlApp Is Nothing Then
        xlApp.ActiveWorkbook.Close()
        xlApp.Quit()
        xlApp = Nothing
    End If

    PrmPathExcelFile = Server.MapPath("~/ExtractFiles/10-31-13.P")

    plmExcelCon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1""")
    cmdLoadExcel = New System.Data.OleDb.OleDbDataAdapter("select * from [10-31-13]", plmExcelCon)

    Dim dt As System.Data.DataTable
    dt = New System.Data.DataTable
    cmdLoadExcel.Fill(dt)
    plmExcelCon.Close()

当代码到达 cmdLoadExcel.Fill(dt) 行时,我只收到一条错误消息,提示“外部表不是预期的格式。”。我假设这与我试图更改文件扩展名的事实有关。但是,我似乎无法打开扩展名为 .P 的文件。

有没有我在这里忽略的方法?或者在使用具有自定义扩展名的文件时这是不可能的。

4

1 回答 1

0

好吧,由于 varocarbas 的提示,我找到了答案。为了将来参考,请根据 Excel 文件类型仔细检查 OledbConnection。在我进行以下更改后,它起作用了:

plmExcelCon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1""")
cmdLoadExcel = New System.Data.OleDb.OleDbDataAdapter("select * from [10-31-13$]", plmExcelCon)

首先,要使用我的 Excel 版本,我需要使用 ACE.OLEDB.12.0 和 Excel 8.0。其次,我必须在表格选择的末尾添加一个简单的“$”,否则它将无法找到正确的工作表。

于 2013-11-08T12:40:20.993 回答