ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 14795|回复: 8

CopyFromRecordset 资料整理

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-10-31 09:17 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:ADO技术

CopyFromRecordset ----通过自动运行 Excel 将 ADO 记录集的内容传输到 Microsoft Excel 工作表。 Excel 有一种 CopyFromRecordset 方法,可以用该方法将记录集传输到一个区域。以CopyFromRecordset为关键词查询,发现完整的中文资料不是很多。特此进行整理。

重点推荐《将数据从 Visual Basic 传输到 Excel 的方法:》

http://support.microsoft.com/kb/247412/zh-cn

特别推荐爱歌学习发的帖子《使用 ADO-SQL 处理 EXCEL 文件的程序架构(实例注释)》

http://club.excelhome.net/viewthread.php?tid=160847&replyID=&skin=0

使用“自动化”功能将数据从 ADO 记录集传输到 Exce

http://support.microsoft.com/kb/246335/zh-cn

CopyFromRecordset Method(中网上有好多人没有找到中文MSDN的这条语句,只有英文)

http://msdn2.microsoft.com/en-us/library/aa165427(office.10).aspx

CopyFromRecordset的使用方法

http://club.excelhome.net/viewthread.php?tid=208567&replyID=&skin=0

如何最快的将上百万条记录导出到同一个Excel中的不同Sheet中

http://topic.csdn.net/u/20070413/09/53d630b5-3301-43d5-9923-7c2e3b29f06e.html

详细内容将作为专题不断收集整理

[此贴子已经被作者于2007-10-31 11:14:03编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-10-31 10:57 | 显示全部楼层
CopyFromRecordset Method 
CopyFromRecordset的用法

Copies the contents of an ADO or DAO Recordset object onto a worksheet, beginning at the upper-left corner of the specified range. If the Recordset object contains fields with OLE objects in them, this method fails.

拷贝ADO或DAO记录集的内容到一个工作表中,一个sheet的左上角范围内(RANGE)。如果OLE对象包含字段,这种方法失败。

expression.CopyFromRecordset(Data, MaxRows, MaxColumns)

expression   Required. An expression that returns a Range object.

表达式:需要表述运行的范围对象

Data  Required Variant. The name of the Recordset object to copy into the range.

数据,需要变量数据,拷贝范围的记录集的名字。

MaxRows  Optional Variant. The maximum number of records to copy onto the worksheet. If this argument is omitted, all the records in the Recordset object are copied.

最大行数 选择变量,拷贝到表(Sheet)的最大数,如果省略记录集的所有记录将被拷贝到对象目标。

MaxColumns  Optional Variant. The maximum number of fields to copy onto the worksheet. If this argument is omitted, all the fields in the Recordset object are copied.

最大列数,选择变量,拷贝到工作表中(sheet)的最大字段数,如果省略,拷贝记录集中所有字段

Remarks注解

Copying begins at the current row of the Recordset object. After copying is completed, the EOF property of the Recordset object is True.

开始拷贝当前记录集行时,拷贝完成,记录集,EOF为真。

When this method copies the recordset to the worksheet, the results will be truncated if you do not specify a range that is large enough to hold the contents of the recordset.

当这种方法拷贝到工作表时,如果不需要的特殊范围比记录包含的内容多,程序将被截去。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-10-31 11:22 | 显示全部楼层
将数据从 Visual Basic 传输到 Excel 的方法(转自http://support.microsoft.com/kb/247412/zh-cn)

概要

将数据从 Microsoft Visual Basic 应用程序传输到 Microsoft Excel 的多种方法。
将数据传输到 Excel 工作簿最常用的方法是“自动化”功能。“自动化”功能为您提供了指定数据在工作簿中所处位置的最大灵活性,以及对工作簿进行格式设置和在运行时进行各种设置的功能。利用“自动化”功能,您可以使用多种方法传输数据:
逐单元格传输数据
将数组中的数据传输到单元格区域
使用 CopyFromRecordset 方法向单元格区域传输 ADO 记录集中的数据
在 Excel 工作表上创建一个 QueryTable,它包含对 ODBC 或 OLEDB 数据源进行查询的结果。
将数据传输到剪贴板,然后将剪贴板内容粘贴到 Excel 工作表中。
您还可以使用一些其他方法将数据传输到 Excel,而不必使用“自动化”功能。如果您正在运行服务器端应用程序,这是一种将批量数据处理从客户端移走的好方法。在没有“自动化”功能的情况下,可以使用下列方法来传输数据:
将数据传输到制表符分隔或逗号分隔的文本文件,然后 Excel 可以将该文本文件分析为工作表上的单元格
使用 ADO 将数据传输到工作表
使用动态数据交换 (DDE) 将数据传输到 Excel
以下各节提供了每种解决方案的详细信息。

使用“自动化”功能逐单元格传输数据

利用“自动化”功能,您可以逐单元格地向工作表传输数据:如果数据量较少,逐单元格传输数据是一种完全可以接受的方法。您可以灵活地将数据放到工作簿中的任何位置,并可以在运行时根据条件对单元格进行格式设置。不过,如果需要向 Excel 工作簿传输大量数据,则建议您使用此方法。在运行时获取的每一个 Range 对象都会产生一个接口请求,因此,以这种方式传输数据速度较慢。另外,Microsoft Windows 95 和 Windows 98 在接口请求上有 64K 限制。如果在接口请求上达到或超过此 64K 限制,自动化服务器 (Excel) 可能停止响应,或者您可能收到表明内存不足的错误。Windows 95 和 Windows 98 中的这一限制在下面的知识库文章中进行了讨论:
在 Win 95/98 上,进程间的 COM 自动化可能会挂起客户端应用程序
需要再次强调的是,逐单元格传输数据仅适用于传输少量数据。如果需要将大量的数据集传输到 Excel,应考虑下文提供的解决方案之一。

使用“自动化”功能将数据数组传输到工作表上的区域

一次可以将一个数据数组传输到多个单元格区域:如果您使用数组传输数据而不是逐单元格传输数据,则在传输大量数据时,传输性能会大大增强。请注意上述代码中的以下行,该行将数据传输到工作表中的 300 个单元格:

使用“自动化”功能将 ADO 记录集传输到工作表区域

Excel 2000 引入了 CopyFromRecordset 方法,使您能够将 ADO(或 DAO)记录集传输到工作表上的某个区域。下面的代码说明了如何自动运行 Excel 2000、Excel 2002 或 Office Excel 2003,以及使用 CopyFromRecordset 方法传输 Northwind 示例数据库中 Orders 表的内容。Excel 97 还提供了一种 CopyFromRecordset 方法,但它只能用于 DAO 记录集。Excel 97 中的 CopyFromRecordset 不支持 ADO。

使用“自动化”功能在工作表上创建 QueryTable

QueryTable 对象表示由外部数据源返回的数据构建的表。当您自动运行 Microsoft Excel 时,只须提供指向 OLEDB 或 ODBC 数据源的连接字符串和 SQL 字符串就可以创建 QueryTable。Excel 假定能够生成记录集,并负责将其插入工作表中您指定的位置。使用 QueryTables 可提供优于 CopyFromRecordset 方法的多种优点:
Excel 处理记录集的创建并将其放置到工作表中。
查询可以保存在 QueryTable 中,以便稍后能够刷新以获取更新的记录集。
当向工作表中添加新的 QueryTable 时,可以指定将工作表上的单元格中已经存在的数据移位,以便容纳新数据(请参见 RefreshStyle 属性以获取详细信息)。
下面的代码演示了如何自动运行 Excel 2000、Excel 2002 或 Office Excel 2003,以便使用 Northwind 示例数据库中的数据在 Excel 工作表中创建新的 QueryTable

使用剪贴板

Windows 剪贴板还可以用作将数据传输到工作表的一种方式。要将数据粘贴到工作表上的多个单元格中,可以复制列由制表符分隔、行由回车符分隔的字符串。下面的代码演示了 Visual Basic 如何使用其 Clipboard 对象将数据传输到 Excel:

创建可由 Excel 分析为行和列的带分隔符的文本文件

Excel 可以打开由制表符或逗号分隔的文件并正确地将数据分析为单元格。当您希望向工作表传输大量数据而只使用少量“自动化”功能(如果有)时,可以使用此功能。这对于客户端-服务器应用程序而言可能是一种好方法,因为文本文件可以在服务器端生成。然后,可以在客户端根据需要使用“自动化”功能打开文本文件。

下面的代码演示了如何从 ADO 记录集创建逗号分隔的文本文件:如果文本文件具有 .CSV 扩展名,则 Excel 将打开该文件而不显示“文本导入向导”,并自动假定该文件是逗号分隔文件。同样,如果文件具有 .TXT 扩展名,Excel 将自动使用制表符分析此文件。

在前面的代码示例中,Excel 使用 Shell 语句启动,文件名用作命令行参数。前面的示例中没有使用“自动化”功能。不过,如果需要的话,您可以使用最少量的“自动化”功能打开文本文件,并以 Excel 工作簿格式保存它:

使用 ADO 将数据传输到工作表

使用 Microsoft Jet OLE DB 提供程序,您可以将记录添加到现有 Excel 工作簿的一个表中。Excel 中的“表”仅仅是一个带有定义名称的区域。区域中的第一行必须包含标题(或字段名),而且所有后续行都包含记录。下列步骤说明了如何使用名为 MyTable 的空表创建工作簿:
1.在 Excel 中启动一个新工作簿。
2.将下面的标题添加到 Sheet1 的 A1:B1 单元格:

A1:名 B1:姓
3.将单元格 B1 的格式设置为右对齐。
4.选择 A1:B1。
5.插入菜单上,选择名称,然后选择定义。输入名称 MyTable,并单击确定
6.将新工作簿另存为 C:\Book1.xls 并退出 Excel。
要使用 ADO 将记录添加到 MyTable 中,您可以使用与以下内容类似的代码:在以此方式将记录添加到该表中后,工作簿中的格式将会保留。在前面的示例中,添加到 B 列中的新字段的格式设置为右对齐。添加到行中的每个记录都将继承它上面的行的格式。

使用 DDE 将数据传输到 Excel

在与 Excel 通信和传输数据方面,DDE 是“自动化”的替代方法;不过,由于“自动化”和 COM 的出现,DDE 不再是与其他应用程序通信的首选方法,而且应仅在没有其他可用的解决方案时才使用该方法。

要使用 DDE 将数据传输到 Excel,您可以:
使用 LinkPoke 方法将数据发送到特定的单元格区域,

- 或者 -
使用 LinkExecute 方法发送 Excel 将执行的命令。
下面的代码示例说明了如何建立 DDE 与 Excel 的会话,以便能够将数据发送到工作表中的单元格,并执行命令。要使用此示例成功建立 DDE 与 LinkTopic Excel|MyBook.xls 的会话,名为 MyBook.xls 的工作簿必须在正运行的 Excel 实例中已打开。

在 Excel 中使用 LinkPoke 时,您需要在行-列 (R1C1) 批注中为 LinkItem 指定区域。如果您要将数据发送到多个单元格,则可以使用列由制表符分隔、行由回车符分隔的字符串。

在使用 LinkExecute 请求 Excel 执行命令时,必须为 Excel 提供 Excel 宏语言 (XLM) 语法的命令。XLM 文档未包括在 Excel 97 版和更高版本中。有关如何获取 XLM 文档的更多信息,请查看以下 Microsoft 知识库文章:

TA的精华主题

TA的得分主题

发表于 2010-10-19 11:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-27 19:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-8-7 15:12 | 显示全部楼层
呵呵,不错的资料。其实copyfromrecordset还是比较简单的。如果配合ado的相关属性,可以让copyfromrecordset更出色。

TA的精华主题

TA的得分主题

发表于 2012-8-7 14:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主辛勤整理

TA的精华主题

TA的得分主题

发表于 2013-11-9 16:53 | 显示全部楼层
正在找相关资料,收藏学习了{:soso_e100:}

TA的精华主题

TA的得分主题

发表于 2017-5-29 15:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习,收藏
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-5 03:53 , Processed in 0.052709 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表