delphi7 下的Excel导出

unit Unit3;

interface

uses
  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ComObj,StdCtrls;

const
  L_ARR_CHAR:array[0..77]of string=('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ','BA','BB','BC','BD','BE','BF','BG','BH','BI','BJ','BK','BL','BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ');
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FExcelApplication: TExcelApplication;
    FExcelWorkbook: TExcelWorkbook;
    FExcelWorkSheet: TExcelWorksheet;
    excelApp,excelBook,excelSheet:Variant;
    FOnExportFront: TNotifyEvent;
    FOnExportAfter: TNotifyEvent;
    FOnExportToExcel: TNotifyEvent;
    Procedure ExcelWorkbookBeforeClose(ASender: TObject; var Cancel: WordBool);
    Procedure ExecOnExportFront(Sender: TObject); virtual;
    Procedure ExecOnExportToExcel(Sender: TObject); virtual;
    Procedure ExecOnExportAfter(Sender: TObject); virtual;
  protected
    property OnExportToExcel: TNotifyEvent read FOnExportToExcel write FOnExportToExcel;
    property OnExportFront: TNotifyEvent read FOnExportFront write FOnExportFront;
    property OnExportAfter: TNotifyEvent read FOnExportAfter write FOnExportAfter;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FExcelApplication.Connect;
  // 方法1跟方法2在给应用赋值的时候是一样的。
  FExcelApplication.Caption := FFormCaption + 'Excel导出';
  FExcelApplication.Workbooks.Add(EmptyParam,0);
  FExcelWorkbook.ConnectTo(FExcelApplication.ActiveWorkbook as _Workbook);
  FExcelWorkbook.Activate;

  FExcelWorksheet.ConnectTo(FExcelWorkbook.ActiveSheet as _WorkSheet);
  FExcelWorksheet.Activate;

  OnExportFront := ExecOnExportFront;
  OnExportToExcel := ExecOnExportToExcel;
  OnExportAfter := ExecOnExportAfter;

  excelApp := CreateOleObject('Excel.Application');
  excelBook := excelApp.workbooks.add;
  excelSheet := excelbook.worksheets.item[1];
  excelSheet.Range[L_ARR_CHAR[0]+inttostr(1) + ':' + L_ARR_CHAR[2]+inttostr(3)].clearcontents;
  excelSheet.Range[L_ARR_CHAR[0]+inttostr(1) + ':' + L_ARR_CHAR[2]+inttostr(3)].merge;
  excelSheet.Range[L_ARR_CHAR[0]+inttostr(1) + ':' + L_ARR_CHAR[2]+inttostr(3)].merge(False);
  //方法2的显示
  excelApp.visible := true;
  excelApp.caption := '裴晓斌';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  excelApp.quit;
end;

procedure TForm1.ExcelWorkbookBeforeClose(ASender: TObject;
  var Cancel: WordBool);
begin
  if Assigned(FExcelApplication) then
  begin
    FExcelApplication.disconnect;
    FExcelApplication.Quit;
  end;
  
  FreeAndNil(FExcelWorksheet);
  FreeAndNil(FExcelWorkbook);
  FreeAndNil(FExcelApplication);
end;

procedure TForm1.ExecOnExportAfter(Sender: TObject);
begin
  // 方法1的显示
  FExcelApplication.Visible[0] := True;
end;

procedure TForm1.ExecOnExportFront(Sender: TObject);
begin
;
end;

procedure TForm1.ExecOnExportToExcel(Sender: TObject);
begin
;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  try
    FExcelApplication := TExcelApplication.Create(nil);
    FExcelWorkbook := TExcelWorkbook.Create(nil);
    FExcelWorkSheet := TExcelWorkSheet.Create(nil);
    //wookBook关闭前的方法;
    // ole 不需要这么做
    FExcelWorkbook.OnBeforeClose := ExcelWorkbookBeforeClose;
  except
    showmessage('对不起,您没有安装Excel');
    FreeAndNil(FExcelWorksheet);
    FreeAndNil(FExcelWorkbook);
    FreeAndNil(FExcelApplication);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FExcelWorksheet);
  FreeAndNil(FExcelWorkbook);
  FreeAndNil(FExcelApplication);
end;

end.

开发背景:手头有个老系统,是前几年用delphi7 开发出来的。里面有个 Excel导出的功能,使用的是Delphi7 自带的Excel导出单元。单元名是 Excel97.pas; 从名字上可以看出,delphi7支持的Excel版本。现在excel版本已经出来 excel2013了,还有些客户为了便宜或者其他原因,买了WPS企业版。在使用Excel导出的时候就遇见了问题。 系统不可以调用WPS进程。经过查证,delphi7下的Excel导出有2种方式,1种是调用delphi7的单元或者delphi7的控件。一种是通过OLE来编程的。下面先来介绍一下2个调用方法下的编程。

1.调用delphi7自带单元。

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...