起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: yt_wxw

【结贴】我想直接操作Excel文件,请问应该如何处理?**

[复制链接]
发表于 2007-10-11 17:59:13 | 显示全部楼层
http://www.baidu.com/s?wd=delphi+excel&cl=3

这样就有很多delphi 操作excel的例子
www.2ccc.com
wwwcsdn.net
都有楼主想要的东西
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 08:55:45 | 显示全部楼层
用Delphi掉用肯定没有问题啦,
现在的问题是使用DispatchHelper调用Exce对象的l属性的时候有一些写法不知道该怎么写,或者是不知道支不支持?比如:v.Workbooks[1].WorkSheets[1].Name := 'DELPHI演示';这句代码用DispatchHelper如何调用?
我是这样写的:System.DispatchHelper.Create(app.PropertyGet('Workbooks[1].WorkSheets[1]',[]));
但是运行抱错
回复 支持 反对

使用道具 举报

发表于 2007-10-12 11:12:10 | 显示全部楼层
DispatchHelper

平台上访问接口都是通过DispatchHelper实现的,通过创建DispatchHelper的实例,调用这个实例的方法来访问接口的属性或者调用接口的方法。
1.1. 相关属性和方法

   1. constructor create(idispatch: TObject); overload;
      创建接口对象的实例
   2.function InvokeMethod(Name: string; Params: array of TObject): TObject; overload;
      调用接口的Name方法,用Params作为参数
   3.function InvokeMethod(Name: string; ParamsByRef: array of Boolean; Params: array of TObject): TObject; overload;
      调用接口的Name方法,用ParamsByRef作为传值参数,用Params作为传参参数
   4.function PropertyGet(Name: string; Params: array of TObject): TObject; overload;
      获取接口的Name属性值作为函数返回值
   5.procedure PropertyPut(Name: string; Params: array of TObject); overload;
      设置接口的Name属性值
  1.    1 var
  2.    2   o:   Object;   
  3.    3   app, docs, doc: System.DispatchHelper;
  4.    4 begin   
  5.    5   //创建接口对象o
  6.    6   o   := ComObj.CreateOleObject('Word.Application');   
  7.    7   //根据接口对象o创建接口app
  8.    8   app := System.DispatchHelper.Create(o);
  9.    9   app.PropertySet('Visible', [False]);
  10.   10   docs := System.DispatchHelper.Create(app.PropertyGet('Documents',  []);
  11.   11   docs.InvokeMethod('Open', []);
  12.   12   ...
  13.   13   //释放接口对象。
  14.   14   (o as System.IDisposable).Dispose;
  15.   15 end;
复制代码


楼主,你的问题主要是app.PropertyGet('Workbooks[1].WorkSheets[1]',[])中的属性名写错了,这个属性的写法需要查一下Office的资料
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 11:18:56 | 显示全部楼层
那么这么说吧:类似v.Workbooks[1].WorkSheets[1].Name 这样的属性应该怎么写呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 11:20:46 | 显示全部楼层
Workbooks[1]中的[1]应该怎么处理?
写成
System.DispatchHelper.Create(app.PropertyGet('Workbooks[1]',  []);
是否可以获得Workbooks[1]这个对象?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 14:42:33 | 显示全部楼层
??
回复 支持 反对

使用道具 举报

发表于 2007-10-12 15:03:17 | 显示全部楼层
procedure TMainForm.Button3Click(Sender: TObject);
var
     o, workbook:   Object;
     app, docs, doc,
     worksheets, worksheet: System.DispatchHelper;
     i: integer;
begin
  //创建接口对象o
  o   := ComObj.CreateOleObject('Excel.Application');

  //根据接口对象o创建接口app
  app := System.DispatchHelper.Create(o);
  app.PropertyPut('Visible', [True]);
  docs := System.DispatchHelper.Create(app.PropertyGet('WorkBooks',[]));
  docs.InvokeMethod('ADD', []);

  workbook := docs.PropertyGet('Count',[]);
  i := ObjectHelper.ToInt(workbook);
  if i>0 then
    begin
      doc := System.DispatchHelper.Create(docs.PropertyGet('Item',[1]));
      worksheets := System.DispatchHelper.Create(doc.PropertyGet('Sheets',[]));
      worksheet := System.DispatchHelper.Create(worksheets.PropertyGet('Item',[1]));
      worksheet.PropertyPut('Name', ['wxw']);
    end;


  //释放接口对象。
  (o as System.IDisposable).Dispose;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 16:40:17 | 显示全部楼层
ok 谢谢
回复 支持 反对

使用道具 举报

发表于 2007-10-13 10:35:00 | 显示全部楼层
谢谢反馈,没有问题就结贴了。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-28 20:55 , Processed in 0.037782 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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