0

我使用了多种方法来尝试导入这些数据(水晶报表服务器每天早上生成一个 97-2000 xls 文件,该文件完全填满第一张表,一半以上填满第二张表 - 尽管它总共有大约 120,000 条记录变化)。数据大约有十四列,但问题是第一行和第二行有一些标题数据占用了两列,无法阻止报表服务器输入。当我使用以下代码导入数据时:

Imports System.Data.OleDb

Public Class ImportData
Private Const databaselocation As String = "G:\db.mdb"
Private Const excelfileloc As String = "D:\"

Private connstr As String = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" & databaselocation & "; User Id=admin; Password=;"
Private excelstring1 As String = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" & excelfileloc
Private excelstring2 As String = "; Extended Properties=""Excel 8.0; HDR=NO; IMEX=1"";"

Public Function ImportExcel() As Boolean
    Dim connection As OleDb.OleDbConnection = New OleDb.OleDbConnection(connstr)
        Dim command As New OleDb.OleDbCommand
        connection.Open()
        command.Connection = connection

    Try
                Using conn As New OleDbConnection(excelstring1 & "excel.xls" & excelstring2)
                    Using cmd As New OleDbCommand()
                            cmd.Connection = conn
                            cmd.CommandText = "INSERT INTO [MS Access;Database=" & databaselocation & "].[dbo_impExcel] SELECT * FROM [Sheet1$]"
                            conn.Open()
                            cmd.ExecuteNonQuery()
                    End Using
                End Using
        Catch ex As Exception
        End Try
End Function
End Class

它只导入前两行并忽略其余行。当我然后重复代码但使用[Sheet2$]时,数据返回正常。如果我手动进入 excel 文件并删除标题,则数据导入正常。目前我正在使用代码首先删除标题行,但我相信应该有更好的方法。在我的实验中,我什至尝试在 MS SQL 数据库中创建存储过程,OPENROWSET但问题仍然存在(尽管由于各种工作限制,这项工作只能依赖 JET。

4

1 回答 1

0

您可以尝试在 Excel 工作表中使用 VB 来创建正确的数据并将其复制到新的 xls 文件中。就我个人而言,我倾向于将内容保存为制表符分隔符或管道文本文件,而不是作为 xls 导入。省去了我尝试导入 xls 的挫败感。

如果文件每天或基于日期具有相同的标题,您应该能够将其编码在一个 xls 文件中,该文件为您完成所有工作,然后关闭。

于 2013-09-15T08:59:39.840 回答