我的建议:不要导入到excel里面,而是导入到数据库里面。
一般电脑装有office,可以拿出来的数据库工具,可以选择office组建之一access。(添加组建的安装过程不叙述了)
txt导入到access有向导可以实现(菜单外部数据→文本文件),这里不叙述了。
而且aceess可以打开2000w的表,只要导入的数据(txt文件大小)不要超过1G就可以了。可以打开这个表,可以修改数据,不会假死,与excel *** 作差不多。
如果楼主还是希望将txt导出到excel,这里给个方法,需要调用点sql语句,但不使用vba(减少程序调试时间):
1、新建一个access文件,用向导将txt导入到access,注意设置自动编号为表的主键,字段名为“ID”。导出后保存表名称为“表1”。
2、按照每个excel文件100w条记录来导出,每超过100w条导出到新的excel表的思路来导出。在access建立一个查询,进入sql视图,粘贴代码: select top 1000000 from 表1
保存该查询为“查询1”,关闭后。在access左边导航处右键“查询1”导出到excel。后面你懂的。
3、进入“查询1”sql视图,修改代码为 select top 1000000 from 表1 where id not in (select top 1000000 id from 表1 )。然后导出100w+1到200w的数据。
4、进入“查询1”sql视图,修改代码为 select top 1000000 from 表1 where id not in (select top 2000000 id from 表1 )。然后导出200w+1到300w的数据。如此类推,一共手工导出20次。
也许你会问,为何不用excel的vba工具,调用ado控件直接打开txt导入数据到excel。我建议是,用ado方法,其实也是建立一个虚拟数据库,但导入数据的过程全部是代码,不直接,调试很花时间(而且容易假死)。手工20次,效率实在高多了。大道至简,选择合适自己的工具和方法。我用游标实现了你的功能。
你首先建立一张空表,和你的 *** 作表一样的结构,但是要求是空表,没有任何内容,比如是tempReg2
你把下面的代码拷贝到SQL查询分析器,稍作修改就行。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
DECLARE
Cursor_Title
CURSOR
FOR
SELECT
distinct
title
FROM
RegMember
OPEN
Cursor_Title
declare
@str
varchar(50)
FETCH
NEXT
FROM
Cursor_Title
Into
@str
WHILE
@@FETCH_STATUS
=
0
BEGIN
insert
into
tempReg2
select
top
1
from
RegMember
where
title=@str
FETCH
NEXT
FROM
Cursor_Title
Into
@str
END
CLOSE
Cursor_Title
DEALLOCATE
Cursor_Title
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我用的表名是RegMember,重复的列名是title,所以这两个名称需要你替换一下。别的可以不变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)