我正在调试一些代码,需要找出哪个
DoCmd.TransferSpreadsheet acImport, , ".....
失败所以我决定逐行“手动”导入它以查看它的位置。
我想这是我正在寻找的东西:
mySpreadSheet = ConnectTo(Spreadsheet.xlsx)
while(!mySpreadSheet.EOF)
get(mySpreadSheet.nextLine)
SQL("UPDATE MyTable with mySpreadSheet.nextLine")
我试过谷歌搜索无济于事。非常感谢任何帮助!
其他信息:
答案 0 :(得分:10)
如果你有一个定义良好的数据表格布局(HansUp答案),ADO效果很好。如果在加载对象之前需要添加控件,可以挂钩到excel工作簿,然后提取您喜欢的任何数据。这实际上取决于你需要的控制水平。
Public Sub LoadExcelToAccess(xlPath As String)
'uses late binding to open excel workbook and open it line by line
'make reference to Microsoft Excel xx.x Object Model to use native functions, requires early binding however
Dim xlApp As Object 'Excel.Application
Dim xlWrk As Object 'Excel.Workbook
Dim xlSheet As Object 'Excel.Worksheet
Dim i As Long
Dim sql As String
Set xlApp = VBA.CreateObject("Excel.Application")
'toggle visibility for debugging
xlApp.Visible = False
Set xlWrk = xlApp.Workbooks.Open(xlPath)
Set xlSheet = xlWrk.Sheets("Sheet1") 'modify to your perticular sheet
'depends on what your trying to do with the sheet
For i = 1 To 10
'quick and dirty: best to load items into custom class collection, then do processing there
sql = "Insert Into [Temp] (Col1) VALUES (" & xlSheet.Cells(i, 1).Value & ")"
DoCmd.RunSQL sql
Next i
'make sure to dispose of objects
xlWrk.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlWrk = Nothing
Set xlApp = Nothing
End Sub
答案 1 :(得分:5)
您可以创建与电子表格的ADO连接(请参阅Connection strings for Excel 2007),然后打开具有该连接的ADO记录集(例如,请参阅StackOverflow: ADODB recordset in VBA says excel field is empty when it's not)。
然后遍历记录集行,并使用行的值创建SQL INSERT语句。
strInsert = "INSERT INTO MyTable (first_field, second_field) VALUES ('" & -
rs2.Field(0).Value & "', '" & rs2.Field(1).Value & "');"
Debug.Print strInsert
CurrentDb.Execute strInsert, dbFailonerror
该代码剪断假定first_field和second_field是文本数据类型。如果它们是数字,则丢失单引号。
我认为这大致与你提出的要求相同。但是,在使用代码之前,我会检查电子表格是否干净地导入到新的本机Access表中。 (另外,检查新表上的数据类型和约束是否与链接的SQL Server表的数据类型和约束兼容。)如果可行,可以尝试从Management Studio直接将电子表格导入SQL Server,或者任何适当的工具。
答案 2 :(得分:0)
另外两个选项:
将Access中的电子表格链接为表格。在Access 2007中,转到“外部数据”窗格并选择“导入Excel电子表格”。您应该导入到现有数据表,新数据表或只链接到Excel文件。然后,您将使用这个新的“Excel”表,如Access表(在最后一种情况下考虑性能问题)。
尝试修复Docmd.TransferSpreadsheet
问题。我已经使用这种方法已经有好几年了,虽然它在某些情况下应该有点棘手(我相信你的情况)但它工作正常。如果您通过此方法提供有关您的问题的更多信息(包括Access和Excel版本),请将其值得。
我希望我能帮到你。祝你好运。
答案 3 :(得分:0)
出于问题排查目的,请尝试链接到电子表格,看看您遇到的问题,包括在数据表视图中查看数据时显示错误。
答案 4 :(得分:0)
您还可以尝试将Excel数据复制到剪贴板并将其粘贴到Access表中。无论什么失败都会被Access写入“粘贴错误”表。