使用 VBA 或 ADO + SQL 从 excel 工作簿读取和写入 excel 工作簿是否更快?
Is reading & writing to an excel workbook from an excel workbook faster using VBA or ADO + SQL?
我有一个 excel 工作簿,其中包含多个子 routines/functions,它们对外部 excel 工作簿进行大量读写操作。这几乎就像外部 excel 工作簿是某种数据库。
对于我必须执行的所有许多读取和写入操作,停止使用 VBA 循环并使用 ADO 和 SQL SELECT/INSERT/UPDATE/DELETE 语句对我来说会更快吗?
不确定,因为这是 excel 到 excel 的通信。
SQL 存储和访问数据的速度明显更快,并且使用 SQL Server Express 易于设置。看来您对使用 SQL 语句很满意,应该沿着这条路走下去。您可以下载SQL服务器here
基本上,在 SQL 中,软件不会存储 excel 中的所有显示属性。所以在 Excel 中,Excel 正在存储值、格式(不同属性的 100s)并等待您修改值。 SQL 只是存储原始值和一些信息,如数据类型。您可以将 Excel sheet 直接导入到 SQL 中,如果您将 headers 保留在
中,它将为您设置列
我相信您是在谈论使用传播sheet 作为活动数据对象的 ADO 调用,而不是导出到 SQL 数据库是吗?
我都试过了,发现两者的区别可以忽略不计,因为我的查询非常简单,因为它只是为了搞乱(我实际上使用了 CSV 或 TXT 文件或带有提示文件的东西).
我仍然相信 ADO 有一个 Excel 到 Excel 的位置来简化查询,但我可能是错的。如果我通过直接 VBA 从 Excel 到 Excel,我通常会将数据读入一个数组并在内存中进行操作,然后对我的 sheet 进行一次更新,这是直接 VBA 操作的最快方法,更多 sheet 更新会大大降低你的速度。
根据您的查询的复杂性,使用 ADO 可能被认为有点矫枉过正,但最终由您决定,它归结为您最熟悉的方式。如果您对其中任何一个感到满意,请对两者进行编码并进行一些速度测试。如果你为其他想知道同样事情的人做,我会很想看到结果。
编辑:如果你打算在数组中做所有事情,请记住你可以在数组中使用多个维度,spreadsheet 是一个包含行和列的二维,你可以加载方面。想象一下:你有一个太阳系,一个行星,一个海洋,一艘船,一个容器,一个盒子,里面有一个 7 维的物品,但你可以通过知道许多太阳系、行星和海洋的坐标来操纵任何一个物品和船等等等等。多维阵列中有很多功能,老实说,唯一的限制是让你的头脑绕过它(确保你在开始之前画出一张小地图;))得到一个项目就像简单如 MyItem(2,4,2,3,4,5,6) 如果你知道你在太阳系 2、行星 4、海洋 2、船 3 容器 4 箱子 5 项目 6.
我有一个 excel 工作簿,其中包含多个子 routines/functions,它们对外部 excel 工作簿进行大量读写操作。这几乎就像外部 excel 工作簿是某种数据库。
对于我必须执行的所有许多读取和写入操作,停止使用 VBA 循环并使用 ADO 和 SQL SELECT/INSERT/UPDATE/DELETE 语句对我来说会更快吗?
不确定,因为这是 excel 到 excel 的通信。
SQL 存储和访问数据的速度明显更快,并且使用 SQL Server Express 易于设置。看来您对使用 SQL 语句很满意,应该沿着这条路走下去。您可以下载SQL服务器here
基本上,在 SQL 中,软件不会存储 excel 中的所有显示属性。所以在 Excel 中,Excel 正在存储值、格式(不同属性的 100s)并等待您修改值。 SQL 只是存储原始值和一些信息,如数据类型。您可以将 Excel sheet 直接导入到 SQL 中,如果您将 headers 保留在
中,它将为您设置列我相信您是在谈论使用传播sheet 作为活动数据对象的 ADO 调用,而不是导出到 SQL 数据库是吗?
我都试过了,发现两者的区别可以忽略不计,因为我的查询非常简单,因为它只是为了搞乱(我实际上使用了 CSV 或 TXT 文件或带有提示文件的东西).
我仍然相信 ADO 有一个 Excel 到 Excel 的位置来简化查询,但我可能是错的。如果我通过直接 VBA 从 Excel 到 Excel,我通常会将数据读入一个数组并在内存中进行操作,然后对我的 sheet 进行一次更新,这是直接 VBA 操作的最快方法,更多 sheet 更新会大大降低你的速度。
根据您的查询的复杂性,使用 ADO 可能被认为有点矫枉过正,但最终由您决定,它归结为您最熟悉的方式。如果您对其中任何一个感到满意,请对两者进行编码并进行一些速度测试。如果你为其他想知道同样事情的人做,我会很想看到结果。
编辑:如果你打算在数组中做所有事情,请记住你可以在数组中使用多个维度,spreadsheet 是一个包含行和列的二维,你可以加载方面。想象一下:你有一个太阳系,一个行星,一个海洋,一艘船,一个容器,一个盒子,里面有一个 7 维的物品,但你可以通过知道许多太阳系、行星和海洋的坐标来操纵任何一个物品和船等等等等。多维阵列中有很多功能,老实说,唯一的限制是让你的头脑绕过它(确保你在开始之前画出一张小地图;))得到一个项目就像简单如 MyItem(2,4,2,3,4,5,6) 如果你知道你在太阳系 2、行星 4、海洋 2、船 3 容器 4 箱子 5 项目 6.