起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 172|回复: 2

【结】EXCEL导入进程没有释放

[复制链接]
发表于 2010-4-6 11:32:22 | 显示全部楼层 |阅读模式
问题如题:
代码如下:
static function TPUBLICMETHOD.getRowCountFromExcel(lFileName:String):Integer;
var App, Exc, E1 : object;
    FApp, FDocs, Ac, range, row : system.DispatchHelper;
    lRowCount: Integer;
begin
    App := ComObj.CreateOleObject('Excel.Application');
    FApp := system.DispatchHelper.Create(App);
    FApp.PropertyPut('visible',[false]);
    Exc := FApp.PropertyGet('Workbooks',[]);
    FDocs := system.DispatchHelper.Create(Exc);
   // FDocs.InvokeMethod('open',[false],[lFileName]);
    FDocs.InvokeMethod('open',[lFileName]);
    E1 := Fapp.PropertyGet('ActiveSheet',[]);
    Ac := system.DispatchHelper.Create(E1);
    range := System.DispatchHelper.Create(ac.PropertyGet('UsedRange',[]));
    row := System.DispatchHelper.Create(range.PropertyGet('Rows',[]));
    lRowCount :=sysUtils.StrToInt(ObjectHelper.ToString(row.PropertyGet('count',[])));
    //FDocs.InvokeMethod('close',[lFileName]);
    (E1 as System.IDisposable).Dispose;        //释放
    (App as System.IDisposable).Dispose;        //释放
    (Exc as System.IDisposable).Dispose;        //释放
    Result := lRowCount;
end;
回复

使用道具 举报

发表于 2010-4-6 12:00:54 | 显示全部楼层
procedure TMainForm.Button7Click(Sender: TObject);
var
  s, strFname, lFilename : string;
  App, Exc, E1 ,UsedRange,Rows: object;
  FApp, FDocs, Ac, range, row : system.DispatchHelper;
begin
  if OpenDialog1.Execute then
  begin
    lFileName := OpenDialog1.FileName;
    App := ComObj.CreateOleObject('Excel.Application');
    FApp := system.DispatchHelper.Create(App);
    FApp.PropertyPut('visible',[false]);
    Exc := FApp.PropertyGet('Workbooks',[]);
    FDocs := system.DispatchHelper.Create(Exc);
    FDocs.InvokeMethod('open',[lFileName]);

    E1 := Fapp.PropertyGet('ActiveSheet',[]);
    Ac := system.DispatchHelper.Create(E1);
    UsedRange := ac.PropertyGet('UsedRange',[]);
    range := System.DispatchHelper.Create(UsedRange);
    Rows :=range.PropertyGet('Rows',[]);
    row := System.DispatchHelper.Create(Rows);
    s :=ObjectHelper.ToString(row.PropertyGet('count',[]));

    FApp.InvokeMethod('Quit',[]);
    (Rows as System.IDisposable).Dispose;
    (UsedRange as System.IDisposable).Dispose;
    (E1 as System.IDisposable).Dispose;        //释放
    (App as System.IDisposable).Dispose;        //释放
    (Exc as System.IDisposable).Dispose;        //释放
  end;
end;

我这样写是没有问题的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-6 12:30:02 | 显示全部楼层
谢谢!OK
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-10 04:32 , Processed in 0.040135 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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