目前程序是这么写的:
try
  Excel:= CreateOleObject('Excel.Application');
  WorkBook:=CreateOleObject('Excel.Sheet');
  except
    screen.Cursor  :=crDefault ;
    OkMessageDlg('微软Excel没有安装,请先安装Excel软件。');
    abort;
  end;
WorkBook := Excel.workBooks.Add;
导出到EXCEL时,如已起了一个EXCEL进程。再导出时,还会去起一个EXCEL进程。
请问如何不另起一个进程?就是判断当前是否有EXCEL打开,如果有EXCEL打开,就在原EXCEL基础上新建一页,而不是重起一个EXCEL进程。如果没有EXCEL打开,就启动一个EXCEL进程。
请问这个程序怎么写?谢谢

解决方案 »

  1.   

    try
     GetActiveOleObject('Excel.Application');
    except 
     try
      Excel:= CreateOleObject('Excel.Application');
      WorkBook:=CreateOleObject('Excel.Sheet');
      except
        screen.Cursor  :=crDefault ;
        OkMessageDlg('微软Excel没有安装,请先安装Excel软件。');
        abort;
      end;
    end;
      

  2.   

    http://community.csdn.net/Expert/TopicView.asp?id=3361061
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      DataLine:TstringList;
      i:integer;
      Linestr:string;
    begin
      DataLine:=TStringList.Create;
      for i:=0 to datat.FieldCount-1 do
        Linestr:=Linestr+datat.Fields.Fields[i].FieldName+#9;
      DataLine.Add(Linestr);
      Linestr:='';
      while not datat.Eof do
      begin
        for i:=0 to datat.FieldCount-1 do
           Linestr:=Linestr+datat.Fields.Fields[i].AsString+#9;
        DataLine.Add(Linestr);
      datat.Next;
      end;
      dataline.SaveToFile('country.xls');
      FreeAndNil(DataLine);
    end;双击生成的文件,既可用 excel 打开
      

  4.   

    看来解答者没有明白我的意思。我的意思是:如果已经有EXCEL打开,就是有EXCEL的进程,然后我再导出数据时,就倒到已经打开的那个EXCEL的一个新的Sheet页上,而不是再打开一个WorkBook。如果没有EXCEL已经打开,就创建一个WorkBook,然后把数据倒到新的WorkBook的sheet1上。
    我不懂的地方是:1、如何判断EXCEL进程是否已经打开?
                    2、如果EXCEL进程已经打开,如何新建已经打开的EXCEL的一个Sheet页,并不会冲掉原先的Sheet页上的数据。
    多谢。
    我的email是[email protected]