发本贴前一天曾发帖咨询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过程的性能如何呢?会有什么负面影响? |