《Delphi 4 编程技术内幕》第16章的例子,就是重头到尾讲这个的(包括饼图),且带示例程序及源代码!

解决方案 »

  1.   


    主单元代码:From 《Delphi 4 编程技术内幕》,Charlie Calvert//////////////////////////////////////
    // Purpose:
    // Project: MapiAndDelphi1.dpr
    // Copyright (c) 1998 by Charlie Calvert
    //
    unit Main;interfaceuses
      Windows, Messages, SysUtils,
      Classes, Graphics, Controls,
      Forms, Dialogs, Db,
      DBTables, Grids, DBGrids,
      StdCtrls, Excel2;type
      TForm1 = class(TForm)
        Table1: TTable;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        ListBox1: TListBox;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        VarObject: Variant;
        ExcellObject: Excel2.Application;
    //    V1: Variant;
        procedure ShowTable(WorkSheet: Excel2.Worksheet);
        procedure ShowVarTables(WorkSheet: Variant);
        procedure ShowVarChart(Sheets: Variant);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses
      ComObj;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
      WorkBook: Variant;
      WorkSheets: Variant;
      WorkSheet: Variant;
      Count, i: Integer;
    begin
      VarObject := CreateOleObject('Excel.Application');
      VarObject.Application.Workbooks.Add;
      VarObject.Application.Visible := True;
      WorkBook := VarObject.Application.Workbooks[1];
      ListBox1.Items.Add(WorkBook.name);
      WorkSheets := Workbook.WorkSheets;  Count := WorkSheets.Count;
      for i := 1 to Count do begin
        WorkSheet := WorkSheets.Item[i];
        WorkSheet.Name := 'Sammy' + IntToStr(i);
        ListBox1.Items.Add(WorkSheet.Name);
      end;  WorkSheet := WorkSheets.Item[1];
      ShowVarTables(WorkSheet);
      ShowVarChart(VarObject.Application.Sheets);
    end;procedure TForm1.ShowVarTables(WorkSheet: Variant);
    var
      i, j: Integer;
    begin
      i := 0;
      while not Table1.Eof do begin
        if Table1.FieldByName('Continent').AsString = 'South America' then begin
          Inc(i);
          for j := 0 to Table1.FieldCount - 1 do
            WorkSheet.Cells[i, j + 1] := Table1.Fields[j].AsString;
        end;
        Table1.Next;
      end;
    end;procedure TForm1.ShowVarChart(Sheets: Variant);
    var
      Chart: Variant;
      V: Variant;
    begin
      Sheets.Add(, Sheets.Item[2], 1, xlChart);
      Chart := Sheets.Item['Chart1'];
      Chart.ChartArea.Interior.Pattern := xlLightDown;
      V := Sheets.Item['Sammy1'].Range['A1:E11'];
      Chart.SeriesCollection.Add(V);
    //  Chart.SourceData := 'Sammy1!$A$1:$E$11';
    end;procedure TForm1.ShowTable(WorkSheet: Excel2.Worksheet);
    var
      i, j: Integer;
    begin
      i := 0;
      while not Table1.Eof do begin
        inc(i);
        for j := 0 to Table1.FieldCount - 1 do
          if Table1.FieldByName('Continent').AsString = 'South America' then
            WorkSheet.Cells[i, j + 1] := Table1.Fields[j].AsString;
        Table1.Next;
      end;
    end;procedure TForm1.Button4Click(Sender: TObject);
    var
      WorkBook: Excel2.WorkBook;
      WorkSheets: Excel2.Sheets;
      WorkSheet: Excel2.WorkSheet;
      Count, i: Integer;
    begin
      ExcellObject := CreateOleObject('Excel.Application') as Excel2.Application;
      ExcellObject.Application.Workbooks.Add(NULL, 0);
      ExcellObject.Application.Visible[0] := True;
      WorkBook := ExcellObject.Application.Workbooks[1];
      ListBox1.Items.Add(WorkBook.name);
      WorkSheets := IDispatch(Workbook.WorkSheets) as Excel2.Sheets;  Count := WorkSheets.Count;
      for i := 1 to Count do begin
        WorkSheet := IDispatch(WorkSheets.Item[i]) as Excel2.WorkSheet;
        WorkSheet.Name := 'Sammy' + IntToStr(i);
        ListBox1.Items.Add(WorkSheet.Name);
      end;  ShowTable(WorkSheets.Item[1] as Excel2.WorkSheet);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    //  if not VarIsEmpty(VarObject) then
    //    VarObject.WorkBooks[1].Close(True, 'c:\sam.xls', 0);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if not VarIsEmpty(VarObject) then
        VarObject.WorkBooks[1].Close(True, 'c:\sam.xls');
    //  SendMail;
    end;{procedure TForm1.SendMail;
    var
      FMapi: TMapi;
    begin
      if ShowModal = mrOk then begin
        FMapi.SendTo := SendToEdit.Text;
        FMapi.Subject := SubjectEdit.Text;
        FMapi.Text := Memo1.Text;
        FMapi.AccountName := FMapi.AccountName;
        FMapi.Attachment := 'c:\sam.xls';
        //  Mapi.PassWord := 'flapper';
        FMapi.SendMail;
      end;
    end; }
    end.
      

  2.   

    《Delphi 4 编程技术内幕》源码下载:
    http://delphixp.myrice.com/delphi/d4_1.zip
    http://delphixp.myrice.com/delphi/d4_2.zip作者主页在更新,可能下载会不怎么稳定