【问题标题】:How to insert particular columns of an XLS into MS SQL Server table?如何将 XLS 的特定列插入 MS SQL Server 表?
【发布时间】:2011-03-09 01:21:11
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    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
    

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

    【讨论】:

    • 感谢您的回复! :) 没有比这更简单的方法了吗?有没有办法使用 openrowset 做同样的事情?而且,如果我要使用这个文件,我应该把它放在哪里?此外,文件名每天都会不同。如何解释其“动态”性质?此外,查看这段代码,我是否正确假设表中的列名和文件中的列名相同,即,因为我将运行 while 循环?请在可以的时候告诉我。
    • 我想我真正想知道的是是否有 SQL 命令来执行此操作。为了简单。谢谢!
    • 非常感谢您的回复!将查看链接。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2022-01-04
    • 2019-02-11
    • 2010-09-23
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多