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

huijcbit 2007-04-13 09:06:02
使用Copy to *** type xl5只能导出65536行记录。
我现在有上百万条的数据记录,不知道怎样才能最快速的导出到同一个EXCEL中。

我尝试了一下3中方法,时间都不可观。

一、使用Foxer兄的算法,一条一条的到出处到EXCEL中,超过65536行就新建Sheet继续这样导。速度最慢。
二、使用_VFP.DataToClip(***)把65536复制到内存中,然后使用eOle.ActiveSheet.Paste。复制速度太慢,粘贴速度很快。
三、Copy to *** type xl5 先拷贝到若干个Excel中。然后在把其他的Excel中的数据Copy到第一个Excel中。速度有多提升,但比起 Copy to *** type xl5 还是相差太远。

不知道大家有没有什么好的方法??
...全文
1031 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjm1234 2008-10-22
  • 打赏
  • 举报
回复
直接导出到CSV文件就行.CSV文件其实就是逗号分隔的txt文件.百万级别的数据用csv文件才行.
直接修改后缀为txt,就可以打开.一般用ultraedit来打开.用notepad非常慢.

xylegend 2007-04-17
  • 打赏
  • 举报
回复
mark
vc_asm 2007-04-17
  • 打赏
  • 举报
回复
操作前先隱藏excel,hide=true會快些
十豆三 2007-04-16
  • 打赏
  • 举报
回复
CSV默认是用EXCEL打开
wwwwb 2007-04-16
  • 打赏
  • 举报
回复
上百万条记录用EXCEL管理,恐怕EXCEL也会很吃力,不如用数据库。
thefirstwind 2007-04-16
  • 打赏
  • 举报
回复
貌似excel本身就可以实现数据库的功能,只要你用odbc连接excel,
用标准sql语言就可以进行操作,我试验过,是可行的。
不知道对楼主有没有帮助。
huijcbit 2007-04-15
  • 打赏
  • 举报
回复
我在软件中没有做报表,
就像把能查询到的所有结果导出Excel中。
导出CSV后还是不能够浏览全部记录。不知道用什么方式打开才可以?
huijcbit 2007-04-13
  • 打赏
  • 举报
回复
我昨天已经对你的Blog中的全面控制Excel做了研究.总结出了上面我说的3中方法.
没有能用的方法都用了.速度还是很慢,不如单个的Copy to *** type xl5快.
太郁闷的.
刚才wwwwb()兄说的方法.我在网上找到了一个,那人说没有_VFP.DataToClip(***)快.

--------------------------------------------------------------------------------
Hello

It's fairly straightforward to do. You can also use the DataToClip method which is much faster than the ADO way...

OPEN DATABASE HOME(2) + [northwind\northwind.dbc]

USE Customers

_vfp.DataToClip(,,3)

LOCAL ex AS Excel.Application

ex = CREATEOBJECT("excel.application")
ex.Workbooks.Add()
ex.Range("A1").Select
ex.ActiveSheet.Paste
ex.Visible = .T.

ex = .NULL.

CLOSE ALL

*** or using ADO...
LOCAL loCon AS ADODB.Connection
loCon = CREATEOBJECT("ADODB.Connection")

WITH loCon
.ConnectionString = [Provider=VFPOLEDB;Data Source=] + HOME(2) + [northwind\northwind.dbc]
.ConnectionTimeout = 30
.CursorLocation = 3

.Open()
ENDWITH

LOCAL rs AS ADODB.Recordset

rs = CREATEOBJECT("ADODB.Recordset")
rs.Open("USE customers",loCon,1, 3, 1)

LOCAL ex AS Excel.Application

ex = CREATEOBJECT("excel.application")
ex.Workbooks.Add()
ex.Range("A1").Select
ex.Range("A1").CopyFromRecordset(rs)
ex.Visible = .t.

ex = .NULL.
十豆三 2007-04-13
  • 打赏
  • 举报
回复
参考一下我的Blog
huijcbit 2007-04-13
  • 打赏
  • 举报
回复
To wwwwb()
-------------------------------------------------
eOle = CreateObject("Excel.Application")
eOle.WorkBooks.Open(dirs)
eOle.Sheets(1).Select
eOle.Cells(1,1).CopyFromRecordset rst
不知道大概是这样吗?
huijcbit 2007-04-13
  • 打赏
  • 举报
回复
哦,没有用过,不知道怎么写,有这方面的资料吗?
wwwwb 2007-04-13
  • 打赏
  • 举报
回复
2、用EXCEL VBA的copyfromrecordset方法试试。试试速度是否快一些。
wwwwb 2007-04-13
  • 打赏
  • 举报
回复
没有明白你的意思。
我现在就是要分成若干个Sheet来保存。
1、不能将所有记录存为一个SHEET;
2、用EXCEL VBA的copyfromrecordset方法试试。
huijcbit 2007-04-13
  • 打赏
  • 举报
回复
To wwwwb()
没有,EXCEL中SHEET的最大容量为65536,只能分为若干SHEET保存,可以考虑EXCEL VBA
的copyfromrecordset

-------------------------------------------------------
没有明白你的意思。
我现在就是要分成若干个Sheet来保存。
wwwwb 2007-04-13
  • 打赏
  • 举报
回复
没有,EXCEL中SHEET的最大容量为65536,只能分为若干SHEET保存,可以考虑EXCEL VBA
的copyfromrecordset
十豆三 2007-04-13
  • 打赏
  • 举报
回复
用这个能不能满足你需求

COPY TO CSV文件名.CSV TYPE CSV
十豆三 2007-04-13
  • 打赏
  • 举报
回复
huijcbit 2007-04-13
  • 打赏
  • 举报
回复
呵呵
我也是这样想的。
等回头写完后分享以下。
十豆三 2007-04-13
  • 打赏
  • 举报
回复
用COPY TO 肯定快。
wwwwb 2007-04-13
  • 打赏
  • 举报
回复
用COPY TO生成若干XLS文件,用CREATEOBJECT("excel.application")打开XLS文件,
再COPY、PASTE,试试。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧