sql - VBA:将表从 Excel 导入 SQL

标签 sql excel vba adodb

我正在尝试使用 VBA 将数据表从 excel 导入到 SQL Server 2012。
最好借助 UDF。

Excel 表格看起来像这样。

TableID    2012  2011  2010  2009
row 1       11     12   13    14
row 2       21     22   23    24
row 3       31     32   33    34
etc..

(我将数字放在单元格中以指定它们的位置。例如 11 = 第 1 行,第 1 列)

数据库表看起来像这样。

Header:        id   |  year  |  row1  |  row2  |  row3  |  etc..
ExampData:  TableId    2012      11       21       31       ..
ExampData:  TableId    2011      12       22       32       ..

(这不包括主键列,它可以是 id 和年份的组合,也可以是 NEWID())


我知道如何导入特定列,例如我可以运行以下代码:

INSERT INTO example_table (id, year, row1, row2, row3) VALUES ('001', '2012', '11', '21', '31')

这对单个列非常有效,但我将如何让它对整个表格(多列和多行)起作用。

最佳答案

所以我设法让它工作了。这是使用 Excel 2010、SQL Sever 2012。
这假定 excel 中的行标题与 sql 中的列标题相同。
这也假设表格布局与问题帖子中的类似。


要将数据从 Excel 导入到 SQL 服务器,我们可以使用 UDF 执行以下操作。
在 excel 中创建一个公共(public)函数:

Public Function import_data(TableID, vHeader As Variant, vRow As Variant, vData As Variant)
End Function

并使用您喜欢的连接方式连接到数据库。
然后对于 INSERT 语句使用以下内容:

'Declare the  variables
Dim vpush As String
Dim headerCount As Long
Dim rowTitles As String
Dim rowDatas As String
Dim i As Long

`Count the amount of columns 
headerCount = Application.CountA(vHeader)

`Create insert statement
For i = 1 To headerCount
   rowTitles = VBA.Join(WorksheetFunction.Transpose(vRow), ", ")
   rowDatas = VBA.Join(WorksheetFunction.Transpose(Application.Index(vData, , i)), "', '")
   vpush = "INSERT INTO example_table (id, " & rowTitles & ", year) VALUES ('" & TableID & "', '" & rowDatas & "', '" & vHeader(i) & "')"
Next i

不要忘记.Execute (vpush)

比任何时候你想导入一个表,你将在 excel 工作表中执行以下操作:

  1. 在单元格中键入 =import_data( 并按 CTRL + SHIFT + A
  2. 选择 TableId
  3. 选择标题行(假设这里总是年份)
  4. 选择包含所有行标题的列(这将是您的 sql 中的标题)
  5. 选择表格中的所有数据

应该可以了。
(P.S. 如果这不是最有效的方法,或者您看到了改进.. 请随意编辑或添加)

关于sql - VBA:将表从 Excel 导入 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15822562/

相关文章:

arrays - 无法从另一个数组分配新的变体数组

mysql - 检索表中的两个最大值

sql - SQL 中的过早优化是否为 "evil",就像它在过程编程语言中一样?

php - 从数据库中获取最新条目

vba - Excel 2010 - 错误 : Cannot run the macro SelectCell using . onAction

Excel 2013 VBA 错误

mysql - 如何更改输出以在短语中间包含计数

C# EPPlus 数据栏条件格式与纯色填充

arrays - 为什么当通过 ParamArray 将数组元素传递给函数时,函数中会到达 varpointer?

vba - Visual Basic 6.0 和 VBA 之间的区别