如何将XLS的特定列插入MS SQL Server表?

时间:2011-03-08 11:26:43

标签: sql-server-2008 import-from-excel

我有一个大约1000行和大约15列的Excel电子表格。我想要做的是将这些数据导入表中,但是有选择地。我想要从第5行(比如说)开始直到距离工作表末尾大约5行的数据。这是因为行数可能会有所不同,但我确信无论电子表格中的行数如何,我都不需要最后的4-5行。另外,我想只插入几列,如Col1-Col5,Col7-Col9和Col12-Col15。是否有一个命令/命令序列可用于实现此目的?请尽快通知我。非常感谢!

1 个答案:

答案 0 :(得分:0)

那里的代码根据xls中的内容创建一个带有SQL指令的文件。您只需添加一个宏,粘贴它,并更改一些内容(添加一段时间以使用标题行填充ColFields Collection,其中列名必须与表字段名称匹配,声明不是,给fileName赋值。 ..)。 然后执行宏,你将拥有一个包含你想要的所有插入的文件,然后你就必须在你的基础上执行这个文件。

Sub Macro1()
    Dim NbOfLines = Worksheets(Sheet1).Range("A65536").End(xlUp).Row - 5 'Not the 5 last lines
    Dim ColFields As New Collection 'Do a while on the title line to fill the collection with wanted columns titles (do not add ignored columns)

    Dim StartSql As String
        StartSql = "INSERT INTO " + TableName + "("
        For Each loopField In ColFields
            StartSql = StartSql + loopField + ","
        Next
        StartSql = Left(StartSql, Len(StartSql) - 1)
        StartSql = StartSql + ") SELECT "


    Dim Value As String
    For i = 1 To NbOfLines
    Sql = ""
        j = 1
        For Each loopField In ColFields
            Value = Worksheets(SheetName).Cells(i, j).Value
            Sql = Sql + IIf(Value = "", "NULL", "'" + Replace(Value, "'", "''") + "'") + ","
            j = j + 1
        Next
        Sql = Left(Sql, Len(Sql) - 1)
        Sql = StartSql + Sql + vbCrLf
        Call WriteLine(Sql, FileName)
    Next


    End Sub


    Public Sub WriteLine(Ligne As String, FileName As String)

    Open FileName For Append As #1
        Print #1, Ligne
    Close
    End Sub

编辑:我知道这不是最好的方法(也不是最漂亮的方法),我把它给了你'几周前我用它将数据从DB导入到另一个(但我只需要这样做)曾经,不是每天)。 我也知道有一种方法可以用OpenRowSet来做到这一点你是对的,但我只是不知道如何(我会经常在这个页面上希望有人教我)。 最后,我建议您阅读此页:A Blog Page With A Solution (你会在这里找到伟大的程序'uftReadfileAsTable':The Procedure Code) 祝你好运!