起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 460|回复: 11

【结贴】帮忙解答一下

[复制链接]
发表于 2010-2-25 14:24:08 | 显示全部楼层 |阅读模式
我在X3平台下打开了一个Excel表格,把数据集中的数据存放在excle表格中然后再另存为,然后关闭Excel,可是在系统中仍有进程,如何关闭这个进程请高手帮忙解答
回复

使用道具 举报

发表于 2010-2-25 14:27:05 | 显示全部楼层
怎么打开的?  如果是vba,参考:
http://bbs.justep.com/forum.php?mod=viewthread&tid=27065
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 14:33:53 | 显示全部楼层
close 也quit 同实也Dispose了
可是系统中还是有进程,关闭运行窗体Excle进程也就跟着消失了,这是为什么??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 14:42:43 | 显示全部楼层
button事件
点击Excle获取DataGrid1中某列的值然后另存EXCLE
以下是源码
高手帮忙解答下我是新手

var
   dataset:TAbstractDataSet;
   obj,objsbject;
   app, workbooks, workbook,worksheets , worksheet : System.DispatchHelper;
   range , cell , Borders , aa ,bb ,cc, font : System.DispatchHelper ;
   lFileName,ee : String ;
   x1,x2,y1,y2,i:Integer;
begin
   dataset:=DataGrid1.DataSource.DataSet;
   ee:=JSCommon.CreateGUIDStr ; //获取全局GUID
   lFileName:='G:\abc.xls';
   obj := ComObj.CreateOleObject('Excel.Application');
   app := System.DispatchHelper.create(obj);
   app.PropertyPut('Visible', [True]);
   workbooks := System.DispatchHelper.Create(app.PropertyGet('WorkBooks',[]));
   workbooks.InvokeMethod('OPEN', [lFileName]);
   workbook := System.DispatchHelper.Create(workbooks.PropertyGet('Item',[1]));
   worksheets := System.DispatchHelper.Create(workbook.PropertyGet('Sheets',[]));
    x1:=1;
    x2:=2;
    i:=dataset.RecordCount;  //获取总条数
   dataset.FindFirst;
   for x1:=x1 to i do
   begin

        worksheet := System.DispatchHelper.Create(worksheets.PropertyGet('Item',['sheet1']));
        cell:=System.DispatchHelper.Create(worksheet.PropertyGet('cells',[x1+1,x2]));
        cell.PropertyPut('value',[dataset.FieldByName(DataGrid1.Columns[0].FieldName).Text]);
        dataset.Next
   end;
       worksheet.InvokeMethod('SaveAs',['C:\Documents and Settings\Administrator\桌面\'+ee+'.xls']);
       workbooks.InvokeMethod('Close',[]);
       app.InvokeMethod('quit',[]);
       (obj as System.IDisposable).Dispose
回复 支持 反对

使用道具 举报

发表于 2010-2-25 15:17:13 | 显示全部楼层
您仔细看6楼的文字,里面写的很明白了。

-
如果后面有DispatchHelper.Create语句,是必须释放的。
cell:=System.DispatchHelper.Create(worksheet.PropertyGet('cells',[x1+1,x2]))  你就没释放
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 15:23:18 | 显示全部楼层
(cell as System.IDisposable).Dispose;
回会报错的提示不能将system.DispatchHelper 转化成system.IDisposable类型
我的cell是DispatchHelper 不是objec类型
我释放过的出错,帮忙解答下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 15:46:41 | 显示全部楼层
怎么没人帮忙解答吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 15:55:39 | 显示全部楼层
还没人帮忙解答吗?
我自己!!!顶!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 17:02:17 | 显示全部楼层
怎么还没人帮忙解答吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-25 17:48:45 | 显示全部楼层
帮忙解答下,我急用,都搞了一下午都没反应
这样写进程还是有各位高手帮忙看看哪里有问题
var
   dataset:TAbstractDataSet;
   obj,objs,obj1,obj2,obj3,obj4bject;
   app, workbooks, workbook,worksheets , worksheet : System.DispatchHelper;
   range , cell , Borders , aa ,bb ,cc, font : System.DispatchHelper ;
   lFileName,ee : String ;
   x1,x2,y1,y2,i:Integer;
begin
      dataset:=Datagrid1.DataSource.DataSet;
      lFileName:='G:\abc.xls';
      ee:=JSCommon.CreateGUIDStr ; //获取全局GUID
      obj:=ComObj.CreateOleObject('Excel.Application') ;
      app := System.DispatchHelper.create(obj);
      app.PropertyPut('Visible', [True]);
      objs:=app.PropertyGet('WorkBooks',[]);
      workbooks := System.DispatchHelper.create(objs);
      workbooks.InvokeMethod('OPEN', [lFileName]);
      obj1:=  workbooks.PropertyGet('Item',[1]);
      workbook :=System.DispatchHelper.create(obj1);
      obj2:= workbook.PropertyGet('Sheets',[]);
      worksheets := System.DispatchHelper.create(obj2);
      x1:=1;
      x2:=2;
      i:=dataset.RecordCount;  //获取总条数
      dataset.FindFirst;
      obj3:= worksheets.PropertyGet('Item',['sheet1']);
      worksheet := System.DispatchHelper.create(obj3);
   for x1:=x1 to i do
   begin
        obj4:= worksheet.PropertyGet('cells',[x1+1,x2]);
        cell:=System.DispatchHelper.create(obj4);
        cell.PropertyPut('value',[dataset.FieldByName(DataGrid1.Columns[0].FieldName).Text]);
        dataset.Next
   end;
       worksheet.InvokeMethod('SaveAs',['C:\Documents and Settings\Administrator\桌面\'+ee+'.xls']);
       //workbooks.InvokeMethod('Close',[]);
       app.InvokeMethod('quit',[]);
       (obj4 as System.IDisposable).Dispose;
       (obj3 as System.IDisposable).Dispose;
       (obj2 as System.IDisposable).Dispose;
       (obj1 as System.IDisposable).Dispose;
       (objs as System.IDisposable).Dispose;
       (obj as System.IDisposable).Dispose;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-11 05:27 , Processed in 0.041176 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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