按照你这个处理方式,建议你不要使用Com,因为这样速度会n慢。
同时确实存在你说的不释放内存的问题。
========================
以下为摘抄
========================
用ADOTable控件打开Excel 文件
1)设置属性ConnetionString
选择 Microsoft Jet 4.0 OLE DB provider
Select or enter a datasorce name -> 选择你要打开Excel文件
User name默认是Admin 密码默认为空,可以不用理会
Extended properties 设为:Excel 8.0 (Excel 2000 好象不可以写成Excel 9.0)就可以读取Excel 97以下得版本的Excel文件
2)属性TableDirect 设为True (否则会出现“FROM 子句的语法错误。”的错误提示 )
3)这时可以从Table属性里面选择table了,所有的文件都是加了$符号的,程序中动态显示的话
可以参考我这个例子:
procedure TForm1.Button1Click(Sender: TObject);
var ProviderStr:string;
Str1,Str2,Str3:String;
SQLstr:string;
i:integer;
begin
ADOTable.Active:=False;
ProviderStr:=ADOTable.ConnectionString;
Str3:=StrPos(PChar(ProviderStr), PChar(';Mode=ReadWrite|Share Deny None;Extended Properties=Excel 8.0'));
Str1:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=admin;';
Str2:='Data Source='+FileList1.FileName;
ADOTable.ConnectionString:=Str1+str2+str3;
for i:=Length(FileList.FileName) downto 1 do
if Copy(FileList.FileName,i,1)='/' then
break;
SQLStr:=Copy(FileList.FileName,i+1,Length(FileList.FileName)-i-4);
SQLStr:=SQLStr+'$';
ADOTable.TableName:= SQLStr;
// SHOWMESSAGE(ADOTable.ConnectionString);
// Showmessage(SQLStr);
try
QdbfOrd.Active:=True;
except
{Error message};
end;
end;
如果用ADOQuery和ADODataSet的话,我就不知到如何设置,老是出现“FROM 子句的语法错误。”的错误提示
链接Excel 2000 的时候Extended Properties=Excel 8.0是正确的。
在MSDN中说明:
Excel 97 对应 ‘Excel 97’
Excel 2000 对应 ‘Excel 8.0’
我试过2000的可以相连。
在ADOQuery中 select * From [Sheet1$]就可以将对应的表的内容读出
记住一定要在表名两边加[]在表名后面加$,不然就报FROM 子句的语法错误
在ADOTable中选择表名时也应手工将这两个符号加上