起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1036|回复: 31

[结][急:DispatchHelper怎么使用啊?帮我看看这个如何写?[请求]**

[复制链接]
发表于 2008-2-19 11:21:23 | 显示全部楼层 |阅读模式
把treelist里的数据生成到excel文件中,我在delphi中已经实现,但是改到X3里不知道怎么改。论坛里找到几个很简单的例子。看不大懂。

var
  ExcelApp:   Variant;
  i,j:integer;
  tmpNode:TdxTreeListNode;
begin
   ExcelApp:=CreateOleObject('Excel.Application');
  try
    ExcelApp.Visible:=false;
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkSheets[1].Activate;
    //增加列名
    j:=1;
    for i:=0 to dbtlData.ColumnCount-1 do
    begin
      if dbtlData.Columns.Visible then
      begin
        ExcelApp.Cells[j,i+1].Value:=dbtlData.Columns.Caption;
         ExcelApp.ActiveSheet.Columns[i+1].ColumnWidth:=dbtlData.Columns.Width div 8;
      end;
    end;
    ExcelApp.ActiveSheet.Rows[1].Font.Name   :=   '宋体';
   ExcelApp.ActiveSheet.Rows[1].Font.Bold       :=   True;
    //增加数据
    while true do
    begin
      if not assigned(dbtlData.TopNode) then
        break;
      if not assigned(tmpNode) then
        tmpNode:=dbtlData.TopNode
      else
        tmpNode:=tmpNode.GetNext;
      if not assigned(tmpNode) then
        break;
      inc(j);
      for i:=0 to dbtlData.ColumnCount-1 do
      begin
        if dbtlData.Columns.Visible then
        begin
          ExcelApp.Cells[j,i+1].Value:={lpad('',tmpNode.Level*2)+}tmpNode.Values;
         end;
      end;
    end;
    ExcelApp.workbooks[1].SaveAs(SaveDialog1.FileName);
  finally
    ExcelApp.ActiveWorkBook.Saved:=True;
    ExcelApp.WorkBooks.Close;
    ExcelApp.Quit;
   end;
回复

使用道具 举报

发表于 2008-2-19 11:31:09 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-19 11:42:41 | 显示全部楼层
晕,那我问个详细的

ExcelApp.Cells[j,i+1].Value这个怎么翻译?
回复 支持 反对

使用道具 举报

发表于 2008-2-19 11:49:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 10:15:17 | 显示全部楼层
前面的已经搞定。就是最后的保存、退出试了许多次都不行啊。该怎么写能不能举个例子?我在google上查了半天也没有。
app := System.DispatchHelper.Create(ExcelApp);
docs := System.DispatchHelper.Create(app.PropertyGet('WorkBooks',[]));
...
  docs.InvokeMethod('SaveCopyAs',[AFileName]);//这里报错
   // docs.InvokeMethod('SaveAs', [AFileName,0,'','',False,False,False,False,False]);//这个也不对,不知道怎么写了
    docs.PropertyPut('Saved', [True]);//这里报错
    docs.InvokeMethod('Close', []);
    app.InvokeMethod('Quit', []);
    (ExcelApp as System.IDisposable).dispose;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 10:45:54 | 显示全部楼层
有人吗????急啊。这个问题搞好几天了
回复 支持 反对

使用道具 举报

发表于 2008-2-20 11:50:50 | 显示全部楼层
ExcelApp.workbooks[1].SaveAs(SaveDialog1.FileName);

docs := System.DispatchHelper.Create(app.PropertyGet('WorkBooks',[]));
...
  docs.InvokeMethod('SaveCopyAs',[AFileName]);//这里报错

好像应该是
docs := System.DispatchHelper.Create(app.PropertyGet('WorkBooks',[]));
  doc1 := System.DispatchHelper.Create(docs.PropertyGet('Item',[1]));

...
  doc1.InvokeMethod('SaveCopyAs',[。。。]);
回复 支持 反对

使用道具 举报

发表于 2008-2-20 11:52:18 | 显示全部楼层
而且,根据属性名猜,saved应该是判断当前文件是否保存了,应该不能赋值吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 11:55:14 | 显示全部楼层
因为SaveCopyAs保存的是副本,所以excel退出时仍然会提示是否保存,资料上说把saved属性置为true就可避免提示。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-2-20 12:08:26 | 显示全部楼层
最初由 alang 发布
[B]ExcelApp.workbooks[1].SaveAs(SaveDialog1.FileName);

docs := System.DispatchHelper.Create(app.PropertyGet('WorkBooks',[]));
...
  docs.InvokeMethod('SaveC..

以下省略...... [/B]


改用doc1是对的。

SaveAs方法的参数那么多,都不知道填些什么。要不然用这个好些。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 08:42 , Processed in 0.044362 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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