起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 674|回复: 9

【结贴】[lixy来讨论]ExcelToTable导入条数**

[复制链接]
发表于 2008-10-25 13:55:28 | 显示全部楼层 |阅读模式
发本贴前一天曾发帖咨询ExcelToTable可否自动识别行数。见
http://bbs.justep.com/forum.php?mod=viewthread&tid=26064
因为ExcelToTable控件要设置StartRow以及EndRow,并且ExcelToTable导入时会导入指定Excel文件的第StartRow到第EndRow行。对于导入Excel文件中数据条数不固定的如果一视同仁就出现麻烦,如果设置的EndRow小了,导入大量数据就出现麻烦,反之,如果设置EndRow大了,导入少量数据时用户友好性不佳。

lixy给出办法,用户输入行数或者用VBA取行数,前者好是好,只是增加了用户的操作负担,后者。。。我对VBA比对X3还要不熟练。

我想是不是可以这样解决。

procedure TMainForm.Button1Click(Sender: TObject);
var
  openDialog: TOpenDialog;
  fileName,msg: string;
  startRow,endRow,importSize,dataSetRows:Integer;
begin
  openDialog := TOpenDialog.Create(nil);
  if openDialog.Execute then
  begin
    fileName := openDialog.FileName;
    if fileName<>'' then
    begin
      excelToTable1.FileName := fileName;

      {初始化startRow、importSize值}
      startRow:=2;
      importSize:=8;

      {开始执行导入}
      repeat
        endRow:=startRow + importSize -1;
        dataSetRows:=DataSetBroker1.DataSet.RecordCount;
        excelToTable1.StartRow:=startRow;
        excelToTable1.EndRow:=endRow;
        try
          excelToTable1.Execute(msg);
        except
          //jsDialogs.ShowMsg(msg,'导入出错');
        end;
        startRow:=endRow+1;
      until dataSetRows + importSize div 2 > DataSetBroker1.DataSet.RecordCount;
    end;
  end;//我已经在界面设置好ExcelToTable的字段映射等相关属性

这样得到解决,不过不知道反复使用ExcelToTable的Execute过程的性能如何呢?会有什么负面影响?
回复

使用道具 举报

发表于 2008-10-25 14:16:33 | 显示全部楼层
一次性肯定比反复去设导入区域好。vba没啥难的,ms的帮助非常的全,大概的取一下某个单元格的值,不为空,就认为下面还有数据。bbs里面有写入excel的vba帖子,反过来读取是类似的。
http://bbs.justep.com/forum.php? ... 3&highlight=vba
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-25 14:46:27 | 显示全部楼层
哦 原来这就是VBA啊,认识了好久竟然不知道名字。用这个方法容易造成Excel进程关不掉,采用一些方法后,也是直到用户关闭X3后方可关掉进程。
如果反复导入,多次使用这个“VBA”,则会反复创建Excel进程。
回复 支持 反对

使用道具 举报

发表于 2008-10-27 08:30:40 | 显示全部楼层
fapp.InvokeMethod('save', []);
  fapp.InvokeMethod('quit', []);
就是关掉进程的代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-27 08:44:32 | 显示全部楼层
VBA的这种用法有时候关不掉进程, 需要强行结束进程方可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-27 08:45:10 | 显示全部楼层
结贴吧。
回复 支持 反对

使用道具 举报

发表于 2008-10-27 08:57:50 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2011-2-23 09:38:35 | 显示全部楼层
用VBA的建议跟脱裤子放屁一样,都用VBA创建Excel对象了,还要遍历所有行统计行数,那完全可以不用你们的ExcelToTable控件了,自己导入数据库得了
回复 支持 反对

使用道具 举报

发表于 2011-2-23 09:40:06 | 显示全部楼层
你们修改一下ExcelToTable控件,增加一个标识列的参数不就完了
回复 支持 反对

使用道具 举报

发表于 2011-2-25 09:27:01 | 显示全部楼层
目前平台没有这样的修改计划
如果自己导入也可以,另外楼主可以看下这个帖子,是别人共享出来的一个关于excel和word的第三方控件
http://bbs.justep.com/forum.php?mod=viewthread&tid=24449
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 14:14 , Processed in 0.035950 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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