当前位置:首页 > 技术知识 > 正文内容

lazarus(free pascal) 操控wps或Excel

maynowei5个月前 (10-19)技术知识75

excel或wps自动化程序用什么语言都能实现,用lazarus的优点是容易分发,lazarus编译出来只有一个exe文件,并且相对于易语言和aardio等更不容易报毒。python和C#编写的程序同样不好分发,需要带上一堆东西,那些语言做出来的程序要么需要自己安装依赖,要么就需要带上庞大的安装包,对于电脑小白安装东西是很费劲的事。

直接上个最小的框架代码:

uses
  ComObj, Variants;

var
  ExcelApp: Variant;
begin
  try
     ExcelApp :=CreateOleObject('Excel.Application');
     //ExcelApp := CreateOleObject('Ket.Application');
     ExcelApp.Visible:= True;
     ExcelApp.Workbooks.Add;
     ExcelApp.Cells[1,1].Value:='zzzzz';
   finally
     if VarIsEmpty(ExcelApp)=False then ExcelApp.Quit;
   end;                                          
end.

1、users ComObj

pascal操作windows COM组件需要ComObj库,所以程序开头引入。

2、ExcelApp := CreateOleObject('Excel.Application');

创建Com对象,如果系统中有office,会创建window office对象,如果没有office,有wps会创建wps对象。万一创建失败,但系统中有wps,那就把'Excel.Application'换成’Ket.Application'吧。

然后就可以对excel对象进行各种操作了。具体有哪些函数和功能参考excel VBA教程。

3、ExcelApp.Quit;

最后,别忘了关闭excel对象,不关闭对象,excel会一直在后台运行。

如果你需要经常编写这样的程序,那么把Excel相关函数封装到接口或类中可能更方便一些:

unit Excel_TLB;

interface

uses
  Windows, ActiveX, Classes, Variants;

const
  ExcelAppGUID: TGUID = '{000208D5-0000-0000-C000-000000000046}';

type
  IExcelApplication = interface(IDispatch)
    ['{000208D5-0000-0000-C000-000000000046}']
    function GetVisible: WordBool; safecall;
    procedure SetVisible(Value: WordBool); safecall;
    procedure Quit; safecall;
    function Workbooks: Variant; safecall;
  end;

implementation

end.

使用时导入接口文件即可:

program ExcelTest;

uses
  ComObj, Excel_TLB;

var
  ExcelApp: IExcelApplication;
begin
  ExcelApp := CreateOleObject('Excel.Application') as IExcelApplication;
  ExcelApp.Visible := True;
  ExcelApp.Workbooks.Add;
  ExcelApp.Cells[1, 1].Value := 'Hello, Excel!';
  ExcelApp.Quit;
end.



相关文章

Objective-C的本质(objective-c的特点)

我们平时编写的Objective-C代码,底层实现其实都是C\C++代码,所以Objective-C的面向对象都是基于C\C++的数据结构实现的OC对象的本质Objective-C的对象、类主要是基于...

伪装成抖音国际版Tiktok的短信蠕虫

概述近期监测到一款仿冒Tiktok的短信蠕虫,该短信蠕虫最明显的特点就是针对Android系统版本高于6.0以上的设备,由于Android版本的更新迭代,现在大部分设备已经更新到较高的版本,通过不完全...

惊现!iOS 16.5 kfd 漏洞利用,成功隐藏 Dock 栏

最近!kfd漏洞比较活跃,进展也是很顺利,今天就有大神成功使用 kfd 漏洞实现隐藏 Dock 栏,到底怎么回事?请继续往下看。-- kfd 漏洞说明 --kfd漏洞适合在 iOS 16.2 - 16...

Go语言进阶:时间轮(golang时间轮)

时间轮概念时间轮(Timing Wheel)是一种高效的定时任务调度数据结构,特别适合处理大量定时任务。它通过一个循环数组(轮盘)和多个槽位(buckets)来组织定时任务,每个槽位代表一个时间间隔。...

C++11 同步机制:互斥锁和条件变量

前段时间,我研究了 ROS2(Jazzy)机器人开发系统,并将官网中比较重要的教程和概念,按照自己的学习顺序翻译成了中文,进行了整理和记录。到目前为止,已经整理了20多篇文章。如果你想回顾之前的内容,...

C语言编写多线程,什么时候要使用互斥锁?为什么要使用互斥锁?

在多线程编程中,当多个线程同时访问共享资源(如变量、文件等)时,会出现竞态条件(Race Condition)问题,导致程序的行为不可预测。为了避免这种问题,需要使用互斥锁来保护共享资源的访问。互斥锁...