如何从访问将 2 个查询导出到 Excel 中的单个工作表

Posted

技术标签:

【中文标题】如何从访问将 2 个查询导出到 Excel 中的单个工作表【英文标题】:How do I export 2 queries to a single worksheet in excel from access 【发布时间】:2012-08-10 18:30:02 【问题描述】:

我正在使用 TransferSpreadsheet 将查询从 access 导出到 excel,它工作正常。

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "qryName", "test1.xls", True

现在我有另一个查询,我想将此查询中的数据添加到同一个工作表中。我该怎么做?

【问题讨论】:

尝试使用电子表格对象而不是 DoCmd。请参阅此处的第三个帖子:pcreview.co.uk/forums/… 如果您的 2 个查询完全相似,您也可以将它们合并在一起,然后在合并查询上使用 DoCmd.TransferSpreadsheet 如果使用第二个查询再次运行相同的命令会发生什么?它是追加数据还是覆盖? @codegeek 如果您传输两个​​具有相同名称的查询,它会覆盖,如果它们具有不同的名称,它们将被写入为该查询命名的单独工作表,例如“query1”、“query2”。我最近在 SO 上写过这个。在这种情况下,我认为自动化将是最好的选择。 一些笔记:***.com/questions/5043021/… 【参考方案1】:

对于我的第一个查询,我使用

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameFirst", "test1.xlsx", True, "MyWorksheetName"

对于第二个查询,我将其放入记录集中

Dim rstName As Recordset
Set rstName = CurrentDb.OpenRecordset("qryNameSecond")

然后我只需使用 CopyFromRecordset 将此记录集复制到工作表。

Dim objApp As Object, objMyWorkbook As Object, objMySheet As Object, objMyRange As Object

Set objApp = CreateObject("Excel.Application")
Set objMyWorkbook = objApp.Workbooks.Open("test1.xlsx")
Set objMySheet = objMyWorkbook.Worksheets("MyWorksheetName")
Set objMyRange = objMySheet.Cells(objApp.ActiveSheet.UsedRange.Rows.Count + 2, 1)

With objMyRange
 rstName.MoveFirst 'Rewind to the first record
 .Clear
 .CopyFromRecordset rstName
End With

objApp.ActiveSheet.UsedRange.Rows.Count 将返回最后使用的行号。我添加了 + 2,因为我希望在两个查询之间有一个空行。

补充一下,我做了一个性能测试。我用 500.000 条记录测试了这种方法。该表包含 500k 行,第一个查询包含 250k 行,第二个查询(使用 OpenRecordSet)包含 250k 行。生成 excel 文件表并将数据显示在 E6600 (2,40 Ghz)、4GB ram 机器上大约需要 10 秒,带有 access/excel 2010。

编辑:

实现相同目的的另一种方法是使用 TransferSpreadsheet 2 次。

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameFirst", "test1.xlsx", True, "MyWorksheetName"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameSecond", "test1.xlsx", True, "MyWorksheetName2"

这将在工作簿中创建 2 个工作表,然后只需将一个工作表的数据复制到另一个工作表。我认为性能会相同但不确定,我会坚持使用 OpenRecordSet。

【讨论】:

以上是关于如何从访问将 2 个查询导出到 Excel 中的单个工作表的主要内容,如果未能解决你的问题,请参考以下文章

将查询从 Access 导出到 Excel 模板

怎样将SQL数据导出到EXCEL中

怎样将SQL数据导出到EXCEL中

怎样将SQL数据导出到EXCEL中

pb中 如何把两个表中的内容导出到一个电子表格 如何把一个字段作为下拉列表框的item

PostgreSQL:将结果数据从 SQL 查询导出到 Excel/CSV