DELPHI中如何调用EXCEL,将数据库中的数据按顺序写入EXCEL表中,打印输出。

解决方案 »

  1.   

    unit EXCELA;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Excel2000, OleServer, DB, DBTables, ComCtrls, Buttons,
      ExtCtrls, jpeg;type
      TForm1 = class(TForm)
        ExcelApplication1: TExcelApplication;
        ExcelWorksheet1: TExcelWorksheet;
        ExcelWorkbook1: TExcelWorkbook;
        Button1: TButton;
        Table1: TTable;
        StatusBar1: TStatusBar;
        BitBtn1: TBitBtn;
        Shape1: TShape;
        Bevel1: TBevel;
        DateTimePicker1: TDateTimePicker;
        Image1: TImage;
        ExcelWorksheet2: TExcelWorksheet;
        ExcelWorksheet3: TExcelWorksheet;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var i,j,k,l,m,n:integer;ColumnRange,qzw,qzw1,QZW2: Variant;begin
    excelapplication1.Connect;
    excelapplication1.Caption:='123';
    excelapplication1.Visible[0]:=true;
    excelapplication1.Workbooks.Add(null,0);
    excelworkbook1.ConnectTo(excelapplication1.Workbooks[1]);
    excelworksheet1.ConnectTo(excelworkbook1.Worksheets[1] as _worksheet);
    excelworksheet2.ConnectTo(excelworkbook1.Worksheets[2] as _worksheet);
    excelworksheet3.ConnectTo(excelworkbook1.Worksheets[3] as _worksheet);
    excelworksheet2.Activate;
    excelworksheet3.Name:='zwtlzr3';
    excelworksheet2.Name:='zwtlzr2';
    excelworksheet1.Name:='zwtlzr1';
    excelworksheet2.Columns.Font.Name:='黑体';
    //excelworksheet2.Cells.Item[1,1]:='zw';
    //excelworksheet2.Cells.Item[1,2]:='zw1';
    qzw:=excelworksheet2.rows;
    QZW1:=excelworksheet2.Range['A1','e1'];
    QZW1.MERGE;
    qzw1:=excelworksheet2.Range['A2','a10'];
    qzw1.Merge;
    qzw1:=excelworksheet2.Range['A2','a1'];
    qzw1.Interior.ColorIndex:=3;
    qzw.rows[1].rowheight:=30;
    qzw.rows[1].font.color:=clblue;
    qzw.rows[1].font.bold:=true;
    qzw.rows[1].font.underline:=true;
    QZW.ROWS[11].PAGEBREAK:=1;
    excelworksheet2.PageSetup.PrintTitleRows:='$12:$12';
    ColumnRange:= excelworksheet2.Columns;
    ColumnRange.Columns[3].ColumnWidth:=30;
    ColumnRange.Columns[3].font.name:='隶书';
    ColumnRange.Columns[3].font.color:=clblue;
    excelworksheet2.PageSetup.PrintGridlines:=true;
    excelworksheet2.PageSetup.PaperSize:=XLPAPERA4;
    //excelworksheet2.PageSetup.PaperSize:=XLPAPERuser;
    excelworksheet2.PageSetup.CenterFooter:='第abc&P页共&N页&d&t&f&a';
    excelworksheet2.PageSetup.PrintTitleRows:='$1:$2';
    excelworksheet2.PageSetup.Orientation:=XLLANDSCAPE;
    //ColumnRange.Columns[1].numberformatlocal:='G/通用格式';
    //ColumnRange.Columns[1].numberformatlocal:='@';
    excelworksheet2.PageSetup.CenterHeader:= '&"隶书"报表演示'#13+'1213';
    table1.Close;
    table1.DatabaseName:='e:\gzkd';
    table1.TableName:='jzg.dbf';
    table1.TableType:=ttfoxpro;
    table1.Open;
    j:=2;
    k:=3;
    excelworksheet2.Cells.Item[2,1]:='11';
    excelworksheet2.Cells.Item[2,1].Orientation:= xlVertical;
    excelworksheet2.Cells.Item[2,1].VerticalAlignment:= xlVAlignCenter;
    excelworksheet2.Cells.Item[2,2]:='22';
    excelworksheet2.Cells.Item[2,3]:='33';
    excelworksheet2.Cells.Item[2,4]:='44';
    excelworksheet2.Cells.Item[2,5]:='55';
    for i:=1 to 100 do
    begin
    excelworksheet2.Cells.Item[k,2]:=table1.Fields[0].AsString;
    excelworksheet2.Cells.Item[k,3]:=table1.Fields[1].AsString;
    excelworksheet2.Cells.Item[k,4].numberformatlocal:='0.00';
    excelworksheet2.Cells.Item[k,4]:=table1.Fieldbyname('11').AsFloat;
    excelworksheet2.Cells.Item[k,5]:=table1.Fieldbyname('22').AsFloat;
    excelworksheet2.Cells.Item[k,5].numberformatlocal:='0.00';
    //excelworksheet2.Cells.Item[k,1].numberformatlocal:='0';
    if i=10 then excelworksheet2.PageSetup.PrintTitleRows:='$12:$12';k:=k+1;
    table1.Next;
    end;
    excelworksheet2.Cells.Item[k+1,2]:='合 计';
    excelworksheet2.Cells.Item[k+1,4]:='=sum(d1:d100)';
    excelworksheet2.Cells.Item[k+1,5]:='=sum(e1:e100)';
    excelworksheet2.Cells.Item[k+1,4].numberformatlocal:='0.00';
    excelworksheet2.Cells.Item[k+1,5].numberformatlocal:='0.00';
    excelworksheet2.Cells.Item[1,2].font.name:='黑体';
    excelworksheet2.Cells.Item[1,1]:='123';
    excelworksheet2.Cells.Item[1,1].HorizontalAlignment := xlCenter;
    excelworksheet2.Cells.Item[1,1].font.size:=20;
    ColumnRange.Columns[4].numberformatlocal:='#,##0.00';
    excelworksheet2.Cells.Item[105,3]:=excelworksheet2.PageSetup.CenterHeader;
    excelworksheet2.Cells.Item[105,4]:=Pos(#13,excelworksheet2.PageSetup.CenterHeader);
    excelworksheet2.Cells.Item[105,5]:='&p';
    excelworksheet2.Protect('123',true,true,true,true);
    excelworksheet2.PrintPreview;
    excelworkBOOK1.Saved[1]:=TRUE;
    QZW2:='12345';
    //excelworksheet2.SaveAs('e:\txt\123.xls',XLEXCEL9795,'789');
    //QZW1.UNMERGE;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    excelapplication1.Quit;
    excelapplication1.Disconnect;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    table1.Open;
    statusbar1.Panels[0].Text:=table1.TableName;
    statusbar1.Panels[1].Text:=inttostr(table1.RecordCount);end;end.
      

  2.   

    为什麽只在第一次 能成功打开EXCEL,第二次就不行了
      excelapplication1.Connect;
      excelapplication1.Caption:='123';
      form1.ExcelApplication1.Visible[0]:=true;
      excelapplication1.Caption:='excel调用';
      form1.ExcelApplication1.Workbooks.Add(null,0);
      form1.ExcelWorkbook1.ConnectTo(excelapplication1.Workbooks[1]);
      form1.ExcelWorksheet1.ConnectTo(excelworkbook1.Worksheets[1] as _worksheet);
      form1.ExcelWorksheet1.Name:='第一页';
      form1.excelworksheet1.Activate ;
      

  3.   

    需要
    ExcelWorksheet1.Disconnect;
    ExcelWorkbook1.Disconnect;
    ExcelApplication1.Disconnect;
    都断开才行。
      

  4.   

    还是不行
    form1.ExcelWorksheet1.Disconnect ;
      form1.ExcelWorkbook1.Disconnect ;
      form1.ExcelApplication1.Disconnect ;
      excelapplication1.Connect;
      excelapplication1.Caption:='123';
      form1.ExcelApplication1.Visible[0]:=true;
      excelapplication1.Caption:='excel调用';
      form1.ExcelApplication1.Workbooks.Add(null,0);
      form1.ExcelWorkbook1.ConnectTo(excelapplication1.Workbooks[1]);
      form1.ExcelWorksheet1.ConnectTo(excelworkbook1.Worksheets[1] as _worksheet);
      form1.ExcelWorksheet1.Name:='第一页';
      form1.excelworksheet1.Activate ;
      

  5.   

    excelapplication1.Quit;
    excelapplication1.Disconnect;
    这两句断开连接。也可以直接关闭EXCEL。
    用WOM、超级兔子等查看进程,如有EXCEL则KILL。
    最简单方法,CTRL+ALT+DEL,查看正在运行的程序,
    如有EXCEL则KILL。
      

  6.   

    excelapplication1.Quit;
    excelapplication1.Disconnect;
    这两句也加上去了,怎样才能直接关闭EXCEL程序呢,我不能每次调用完后都按CTRL+ALT+DEL来关闭EXCEL啊
      

  7.   

    可以了,将CONNECTKIND改一下就可以了,糊弄了大家半天不好意思。
      

  8.   

    还是不行啊,进程中有太多的EXCEL程序在运行,都没有被关闭,这样很容易死机。
    怎样彻底关闭EXCEL程序
      

  9.   

    难道就不能用ADO 操作EXCEL吗?