DC娱乐网

Delphi交互式批量创建和删除多月份表格

前言

在前面的文章中介绍了使用VBA批量创建和删除12个月份表格。在Delphi中,也可以通过OLE方式,通过跟VBA相同的API去调用Excel。


知识点

Delphi可以通过OLE技术调用Excel。涉及到的方法如下:

功能

方法

新建Excel对象

CreateOleObject('Excel.Application')

获取打开的Excel对象

GetActiveOleObject('Excel.Application')

操作Excel工作簿和工作表的方法,跟之前在VBA介绍的一模一样。

需求设计

主要有两个需求点:

  • 新建一个工作簿,批量新建1-12月份对应的工作表
  • 找到当前工作簿,批量删除1-12月份对应的工作表

代码实现

按照上面的设计,很容易写出对应的代码。逻辑跟VBA保持一致,用到的API也跟VBA完全一样,只是Delphi对应的语法和VBA略有差异。

unit Unit1;interfaceuses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type  TForm1 = class(TForm)    Button1: TButton;    Button2: TButton;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;implementationuses  ComObj;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var  xlsApp, wb, sht: Variant;  i: Integer;begin  try    xlsApp := CreateOleObject('Excel.Application');    xlsApp.Visible := True;    wb := xlsApp.Workbooks.Add;    for i := 1 to 12 do    begin      sht := wb.Worksheets.Add(null, wb.Worksheets[wb.Worksheets.Count]);      sht.Name := IntToStr(i) + '月';    end;  finally    wb := UnAssigned;    xlsApp := UnAssigned;  end;end;procedure TForm1.Button2Click(Sender: TObject);var  xlsApp, wb, sht: Variant;  i, shtCount, month: Integer;begin  xlsApp := GetActiveOleObject('Excel.Application');  xlsApp.Visible := True;  xlsApp.DisplayAlerts := False;  wb := xlsApp.ActiveWorkbook;  shtCount := wb.Worksheets.Count;  i := shtCount;  while i > 0 do  begin    sht := wb.Worksheets[i];    month := StrToIntDef(StringReplace(sht.Name, '月', '', [rfReplaceAll]),0);    if (month>=1) and (month <= 12) then sht.Delete;    i := i-1;  end;end;end.

效果预览

上述功能最后的效果如图所示。