【问题标题】:Best way to read an Excel file into an Access database将 Excel 文件读入 Access 数据库的最佳方法
【发布时间】:2011-02-23 17:35:19
【问题描述】:

从 Access 2007 应用程序中读取(仅读取)Excel 文件的“最佳”方式是什么。我只想遍历行并将数据放入 Access 表中。

我不想手动导入(获取外部数据对话框),而是通过 VBA。用户获得一个带有浏览按钮的表单,然后指向一个具有已定义内容/格式的 Excel 文件。之后,VBA 代码读取数据并将其放入 Access 数据库中。

【问题讨论】:

    标签: excel ms-access ms-access-2007 vba office-2007


    【解决方案1】:

    如果要读取整个电子表格,可以将 Excel 电子表格直接导入 Access。请参阅herehere

    您还可以选择链接到 Excel 电子表格而不是导入它。这样,对 Excel 电子表格的任何更改都将反映在链接表中。但是,您将无法在 Access 中进行更改。

    第三种选择是在 Access 中编写一些 VBA 代码以打开记录集并读取电子表格。请参阅 KeithG 在this thread 中的答案。您可以执行以下操作以在 VBA 中打开电子表格:

    Dim xl As Excel.Application
    Dim xlsht As Excel.Worksheet
    Dim xlWrkBk As Excel.Workbook
    
    Set xl = CreateObject("Excel.Application")
    Set xlWrkBk = GetObject("H:/ggg.xls")
    Set xlsht = xlWrkBk.Worksheets(1)
    

    【讨论】:

    • 谢谢,太好了,但我的意思是 VBA 的一个选项。我已经扩展了这个问题,见上文
    • 查看我编辑的帖子,了解如何通过 VBA 访问电子表格。
    • 您可以使用 DoCmd.TransferSpreadsheet 在 VBA 中运行导入。在我看来,这个答案似乎很不完整。
    • TLiebe > 感谢您的回答,但我更喜欢 TransferSpreadsheet 的回答。不幸的是,我只能将 1 个答案标记为已接受的答案
    【解决方案2】:

    试试这样的:

    Dim excelApp As Excel.Application
    Dim workbook As Excel.Workbook
    Dim worksheet As Excel.Worksheet
    
    Set excelApp = CreateObject("Excel.application")
    Set workbook = excelApp.Open("C:\someFileName.xls")
    Set worksheet = workbook.Worksheets(1)
    

    然后循环遍历行和列,从单元格中提取数据,并将其插入到数据库中。 (您可以使用 worksheet.cells 方法。)尝试在 google 上搜索代码示例。

    【讨论】:

    • 那么,如何循环遍历行和列?我想将 xlsx 导入表中,但由于列不一定与表中的列匹配,因此我需要手动进行一些重定向。
    【解决方案3】:

    您可以尝试 DoCmd.TransferSpreadsheet 方法。

    DoCmd.TransferSpreadsheet acImport, , "from_excel","C:\Access\demo.xls", True
    

    将电子表格数据导入到名为 from_excel 的表中,并假定电子表格的第一行包含字段名称。有关详细信息,请参阅 TransferSpreadsheet 的访问帮助或在线here

    【讨论】:

      【解决方案4】:

      以下是我读取 excel 文件和所有工作表名称的方法:

      Function listOfWorksheet(filename As String) As Collection
      
      Set dbExcel = OpenDatabase(filename, False, True, "excel 8.0")
      For Each TableDef In dbExcel.TableDefs
          Debug.Print TableDef.Name
      Next
      
      End Function
      

      现在,您可以使用工作表的名称来阅读全部内容:

      Function ReadMyObjects(filename as String, wsName as String) As Collection
      On Error GoTo label_error
      Set results = New Collection
      Dim countRows As Integer
      Set dbExcel = OpenDatabase(filename, False, True, "excel 8.0")
      Set excelRs = dbExcel.OpenRecordset(wsName, dbOpenSnapshot)
      
      Do While Not excelRs.EOF
          'Data Rows
           Dim item As MyObject 'a custom object defined by you.
           Set item = New MyObject
           item.ABC = Nz(excelRs.Fields("COLUMN_ABC").Value, "")
           item.DEF = Nz(excelRs.Fields("COLUMN_DEF").Value, "")
           results.Add item
           excelRs.MoveNext
      Loop
      excelRs.Close
      Set ReadMyObjects= results
      GoTo label_exit
      label_error:
          MsgBox "ReadMyObjects" & Err.Number & " " & Err.Description
      label_exit:
      End Function
      

      【讨论】:

        猜你喜欢
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多