16 个解决方案
#1
可以把这些Excel文件做为数据库文件,然后遍历记录,插入到一个工作表内.
一般是采用ole方式,但如果数据超过2000条就不要采用这种方式了.
只要把数据取出来,然后放到文本里面.
然后利用Excel把文本数据读进来.
一般是采用ole方式,但如果数据超过2000条就不要采用这种方式了.
只要把数据取出来,然后放到文本里面.
然后利用Excel把文本数据读进来.
#2
我试过把多个Excel文件的数据全部读出到StringGrid里,然后再把StringGrid的数据导出到Excel,但速度很慢,假设三个文件(每个有300行,15列),时间就需要5分钟.
#3
再好代码示范
#4
最好有代码示范
#5
代码不好写,思路倒有:
lurel(城市陌生人) 兄说的不错,把所有记录先合并到一个数据库表中,再从这张表 ole 到 Excel 中就可以了,数据格式一样,在数据库中操作很方便嘛!
lurel(城市陌生人) 兄说的不错,把所有记录先合并到一个数据库表中,再从这张表 ole 到 Excel 中就可以了,数据格式一样,在数据库中操作很方便嘛!
#6
不知你是都插入到一个sheet里面还是一个文件插入一个sheet,如果插入到一个sheet,注意excel有65535行数限制。
思路如下:
OLE操作(可以参见ccrun老妖网站);打开一个excel A,打开要插入的B,获取行数,建立rang,复制,到A中粘贴,打开C获取行数,建立rang,复制,设置A中起始单元格,粘贴……
用rang操作比一行一行的读取写入要快的多
lurel(城市陌生人) 的方法应该也可以
思路如下:
OLE操作(可以参见ccrun老妖网站);打开一个excel A,打开要插入的B,获取行数,建立rang,复制,到A中粘贴,打开C获取行数,建立rang,复制,设置A中起始单元格,粘贴……
用rang操作比一行一行的读取写入要快的多
lurel(城市陌生人) 的方法应该也可以
#7
谢lvjack提醒
能否一个sheet到了65535后剩余的自动插入到下一个sheet
能否一个sheet到了65535后剩余的自动插入到下一个sheet
#8
请问如何复制rang和粘贴rang
#9
1.能否一个sheet到了65535后剩余的自动插入到下一个sheet
自己根据读到的行数计算
2.请问如何复制rang和粘贴rang等等事宜详见老妖写的OLE操作Excel
老妖没有写到的自己用Excel录制一下宏然后根据宏的代码改写为OLE操作的代码
自己根据读到的行数计算
2.请问如何复制rang和粘贴rang等等事宜详见老妖写的OLE操作Excel
老妖没有写到的自己用Excel录制一下宏然后根据宏的代码改写为OLE操作的代码
#10
lvjack说的思路比较可行
但我想知道如何操作rang的复制和粘贴
但我想知道如何操作rang的复制和粘贴
#11
老妖的文章http://www.ccrun.com/article/go.asp?i=635&d=g75jbn
#12
老妖的文章没有写到如何操作rang的复制和粘贴
#13
我代码中的一部分(粘贴的),你自己参考,另外仔细看看Excel中录制的宏,把我的代码改改就作出复制的了
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure
//-------------------------------------
rng="A"+AnsiString(row+2);
vExcel.Exec(PropertyGet("Range")<<rng.c_str()).Exec(Procedure("Select"));
Clipboard()->SetTextBuf(sl->Text.c_str());
vExcel.PG("ActiveSheet").PR("Paste");
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure
//-------------------------------------
rng="A"+AnsiString(row+2);
vExcel.Exec(PropertyGet("Range")<<rng.c_str()).Exec(Procedure("Select"));
Clipboard()->SetTextBuf(sl->Text.c_str());
vExcel.PG("ActiveSheet").PR("Paste");
#14
用ADOConnection吧.
#15
用OLE太慢了!个人建议还是先都转成文本文件,然后合并,然后。。。
#16
对了,用ADOConnection也好了
#1
可以把这些Excel文件做为数据库文件,然后遍历记录,插入到一个工作表内.
一般是采用ole方式,但如果数据超过2000条就不要采用这种方式了.
只要把数据取出来,然后放到文本里面.
然后利用Excel把文本数据读进来.
一般是采用ole方式,但如果数据超过2000条就不要采用这种方式了.
只要把数据取出来,然后放到文本里面.
然后利用Excel把文本数据读进来.
#2
我试过把多个Excel文件的数据全部读出到StringGrid里,然后再把StringGrid的数据导出到Excel,但速度很慢,假设三个文件(每个有300行,15列),时间就需要5分钟.
#3
再好代码示范
#4
最好有代码示范
#5
代码不好写,思路倒有:
lurel(城市陌生人) 兄说的不错,把所有记录先合并到一个数据库表中,再从这张表 ole 到 Excel 中就可以了,数据格式一样,在数据库中操作很方便嘛!
lurel(城市陌生人) 兄说的不错,把所有记录先合并到一个数据库表中,再从这张表 ole 到 Excel 中就可以了,数据格式一样,在数据库中操作很方便嘛!
#6
不知你是都插入到一个sheet里面还是一个文件插入一个sheet,如果插入到一个sheet,注意excel有65535行数限制。
思路如下:
OLE操作(可以参见ccrun老妖网站);打开一个excel A,打开要插入的B,获取行数,建立rang,复制,到A中粘贴,打开C获取行数,建立rang,复制,设置A中起始单元格,粘贴……
用rang操作比一行一行的读取写入要快的多
lurel(城市陌生人) 的方法应该也可以
思路如下:
OLE操作(可以参见ccrun老妖网站);打开一个excel A,打开要插入的B,获取行数,建立rang,复制,到A中粘贴,打开C获取行数,建立rang,复制,设置A中起始单元格,粘贴……
用rang操作比一行一行的读取写入要快的多
lurel(城市陌生人) 的方法应该也可以
#7
谢lvjack提醒
能否一个sheet到了65535后剩余的自动插入到下一个sheet
能否一个sheet到了65535后剩余的自动插入到下一个sheet
#8
请问如何复制rang和粘贴rang
#9
1.能否一个sheet到了65535后剩余的自动插入到下一个sheet
自己根据读到的行数计算
2.请问如何复制rang和粘贴rang等等事宜详见老妖写的OLE操作Excel
老妖没有写到的自己用Excel录制一下宏然后根据宏的代码改写为OLE操作的代码
自己根据读到的行数计算
2.请问如何复制rang和粘贴rang等等事宜详见老妖写的OLE操作Excel
老妖没有写到的自己用Excel录制一下宏然后根据宏的代码改写为OLE操作的代码
#10
lvjack说的思路比较可行
但我想知道如何操作rang的复制和粘贴
但我想知道如何操作rang的复制和粘贴
#11
老妖的文章http://www.ccrun.com/article/go.asp?i=635&d=g75jbn
#12
老妖的文章没有写到如何操作rang的复制和粘贴
#13
我代码中的一部分(粘贴的),你自己参考,另外仔细看看Excel中录制的宏,把我的代码改改就作出复制的了
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure
//-------------------------------------
rng="A"+AnsiString(row+2);
vExcel.Exec(PropertyGet("Range")<<rng.c_str()).Exec(Procedure("Select"));
Clipboard()->SetTextBuf(sl->Text.c_str());
vExcel.PG("ActiveSheet").PR("Paste");
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure
//-------------------------------------
rng="A"+AnsiString(row+2);
vExcel.Exec(PropertyGet("Range")<<rng.c_str()).Exec(Procedure("Select"));
Clipboard()->SetTextBuf(sl->Text.c_str());
vExcel.PG("ActiveSheet").PR("Paste");
#14
用ADOConnection吧.
#15
用OLE太慢了!个人建议还是先都转成文本文件,然后合并,然后。。。
#16
对了,用ADOConnection也好了