procedure TForm1.Button1Click(Sender: TObject);
var   i,j:integer;begin
    adoquery1.Close;
    adoquery1.Open;  //连接数据库,这里只演示SQL我先写进去了
   //  texcelapplication.Create(self);  //excelapplication1
  //  texcelworkbook.Create(self);     //excelworkbook1
    //texcelapplication.Create(self);   //excelworksheet1
    texcelapplication.Create(self).Connect;
    texcelapplication.Create(self).Workbooks.Add(null,0);
    texcelworkbook.Create(self).ConnectTo(texcelapplication.Create(self).Workbooks[1]);
    texcelapplication.Create(self).ConnectTo(texcelworkbook.Create(self).Sheets[1]as _worksheet);
    if adoquery1.RecordCount > 0 then    begin
        i:= 0;
        while not adoquery1.Eof
        do        begin
            for j:=0 to adoquery1.FieldCount-1
            do
            begin
            texcelapplication.Create(self).Cells.Item[i+1,j+1]:= adoquery1.Fields[j].AsString;
            end;
        i:= i+1;
        adoquery1.Next;
        end;
    end;
       texcelworkbook.Create(self).SaveCopyAs('e:\temp.xls');   //最后注意这里要把excelapplication,excelworkbook,excelworksheet
       //关闭掉,怎么关?//别人给我的代码  我也调不出来
     //出错信息为[Error] Unit1.pas(47): Incompatible types: '_Worksheet' and '_Application'
 end;

解决方案 »

  1.   

    兄弟这是我写的例子,好人做到底,你要在form上面放上texcelapplication,texcelworkbook,texcelworksheet三个控件,你在上面注释的三行中第三行错了!
    //  texcelapplication.Create(self);  //excelapplication1
      //  texcelworkbook.Create(self);     //excelworkbook1
        //texcelworksheet.Create(self);   //excelworksheet1//texcelworksheet.Create(self).ConnectTo(texcelworkbook.Create(self).Sheets[1]as _worksheet);
    我还是把原代码给你吧!var i,j : integer;begin
        adoquery1.Open;  //连接数据库,这里只演示SQL我先写进去了
        ea1 := texcelapplication.Create(self);  //excelapplication1
        ew1 := texcelworkbook.Create(self);     //excelworkbook1
        ews1 := texcelworksheet.Create(self);   //excelworksheet1
        ea1.Connect;
        ea1.Workbooks.Add(null,0);
        ew1.ConnectTo(ea1.Workbooks[1]);
        ews1.ConnectTo(ew1.Sheets[1]as _worksheet);
        if adoquery1.RecordCount > 0 then    begin
            i:= 0;
            while not adoquery1.Eof
            do        begin
                for j:=0 to adoquery1.FieldCount-1
                do
                begin
                ews1.Cells.Item[i+1,j+1]:= adoquery1.Fields[j].AsString;
                end;
            i:= i+1;
            adoquery1.Next;
            end;
        end;
           ew1.SaveCopyAs('e:\temp.xls');//保存EXCEL这里你也可以自己写更多
           //最后注意这里要把excelapplication,excelworkbook,excelworksheet
           //关闭掉,怎么关?这个自己摸摸吧。不写的话要看到EXCEL表最好把机器注销一下
    //这里只是一个示例你还可以在里面加入写表头的代码等其他功能。    end;    
      

  2.   

    关闭是比较简单的事情
    ea1.destroy
    ew1.destroy
    ews1.destroy