2017-02-23 50 views
1

我正在使用Access并需要从Excel导入数据。 但是表中有太多的列,我只需要其中的一些。现在我要做的是找出我需要的每个单元格,并将它们合并在一起,然后插入到Access中。有没有一种简单的方法将数据导入到VBA的Excel中进行访问?

Set file = GetObject(path) 'get excel file 
intArrNeedCols = Array(3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 26) 'the columns I need 
For row = 2 To file.Sheets(1).UsedRange.Rows.Count 'loop and collect values of each cell in the target column,the first row is title 
    strSQL = "INSERT INTO orderlist VALUES(" 
    For Each col In intArrNeedCols 
     strSQL = strSQL & "'" & file.sheets(1).cells(row, col) & "'," 
    Next 
    …… 'other statements,like excute sql statement 
Next 

正如你所看到的,太复杂,难以维护,我想知道是否有一个简单的方法来做到这一点,大加赞赏,如果你可以在这里发布的代码,因为我是VBA的小白。

+0

您可以链接Excel工作表或者您可以使用ADO。 – Fionnuala

+0

我该怎么办? – Guoliangcai

+0

看看TransferSpeadsheet。 – Fionnuala

回答

0

考虑直接从MS Access里面查询附加查询,它也可以在DAO/ADO连接中使用。 I/O方法(如DoCmd.TransferSpreadsheet)不允许选择电子表格中的特定列,除非您创建特殊的Excel选项卡或临时Access表。

在下面的查询中相应地调整命名列以及文件/图纸名称参考。用方括号或反引号排除任何保留字,空格和特殊字符。

INSERT INTO OrderList 
SELECT t.[Col1], t.[Col2], t.[Col3] ... 
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\File.xlsx].[SHEETNAME$] t; 
+0

我很好奇,为什么SQL Server应答到MS Access问题? – Fionnuala

+0

他们有什么东西 – Guoliangcai

+0

其实现在我有一个新的问题,我刚刚做了你说的,它的工作原理,但发现空单元格也会被导入,我该如何解决这个问题。 – Guoliangcai

相关问题