【问题标题】:slow exporting array from access to excel从访问到 excel 导出数组很慢
【发布时间】:2020-07-14 05:27:22
【问题描述】:

我有一个与slow exporting from access to excel 类似的性能问题,通过设置单个单元格值循环将数据导出到 MS Excel:

objSheet.Cells(table_1_row_no + intcounter, table_1_colA_col_no) = table_1_array(intcounter, 0)

但是我的数据来自一个数组,并且需要在将其传输到那里后在 excel 中进行处理,因此我需要在传输数据后使用一个打开的工作表。因此,上述帖子中提到的方法都不是非常合适的。

我有一个从数据库中提取数据的 MS 访问应用程序,在将 vba 中的数据放入 Excel 之前,它会对其进行相当多的处理。因此,要传输的数据是数组而不是记录集。将其返回到记录集以允许使用 .CopyFromRecordset 方法的最简单方法是创建一个临时表和记录集,但除非没有更好的办法,否则这会导致一条相当长的路径。

在 Access 取回结果之前,电子表格会进行冗长的计算。我很想把它留在 excel 中,因为这让工程师可以灵活地使用它来根据不同情况进行调整(环境受到控制,因此无需担心未经授权的更改)。因此,仅删除 csv 或 excel 文件而不打开它的选项也不适合。

非常感谢任何建议。

【问题讨论】:

  • 你为什么有一个数组?为什么不首先将数据构建到记录集中?
  • 创建一个包含您要传输的值的新二维数组,然后通过一次操作将该数组复制到工作表中。 objSheet.Cells(table_1_row_no, table_1_colA_col_no).resize(numRows,1).Value = yourArrayHere
  • 二维数组提供了一种快速提高性能的方法 - 感谢 Tim。
  • 对于某些数组,数据可以很容易地来自记录集。对于其他人来说,在从数据库中提取后,在 vba 中有很多处理来计算相关数字,而对于其他人来说,数据由一个来源的数字和另一个来源的数字等组成。因此,有几种情况不适合基于表或查询创建记录集。

标签: excel vba ms-access export-to-excel


【解决方案1】:

我遇到了同样的问题,尝试将您的数据源转换为记录集 如果您使用 EXCEL 2000、2002、2003 或 2007,则使用 CopyFromRecordset

'Copy the recordset to excel sheet we  start in cell A1
 sheet1.Cells(1, 1).CopyFromRecordset rst

注意,如果记录集包含 OLE 对象字段或数组数据,如分层记录集,CopyFromRecordset 将失败

【讨论】:

  • 我知道记录集需要基于表或查询。是否存在无法将其基于查询或表的情况,而临时表就是答案?虽然我很乐意这样做,但如果它是直观的,那么它接缝很长。如果有一个表或查询来根据不同的问题来建立数据。
  • 您可以通过在其上添加列来创建新的记录集,然后您可以通过while或for循环填充该记录集。
猜你喜欢
  • 2014-07-30
  • 2014-07-10
  • 1970-01-01
  • 2020-01-30
  • 2015-03-25
  • 2011-04-28
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多