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

职场菊菊子 2024-06-19 13:14:00
前言

在前面的文章中介绍了使用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 =(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.效果预览

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

0 阅读:0

职场菊菊子

简介:感谢大家的关注