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

lazarus(free pascal) 操控wps或Excel

maynowei6个月前 (10-19)技术知识106

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.



相关文章

Linux系统编程:条件变量为什么要用锁

条件变量可以解决线程同步和共享资源访问的问题,条件变量是对互斥锁的补充,它允许一个线程阻塞并等待另一个线程发送的信号,当收到信号时,阻塞的线程被唤醒并试图锁定与之相关的互斥锁。具体定义如下:等待:in...

go语言并发原语RWMutex实现原理及闭坑指南

1.RWMutex常用方法Lock/UnlockRLock/RUnlockRLocker 为读操作返回一个Locker接 口的对象2. RWMutex使用方法 func main() { var c...

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

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

Oracle高级数据库特性揭秘:存储过程、触发器与权限管理

当谈论Oracle高级数据库特性时,存储过程和函数、触发器、权限管理和安全性以及数据库连接和远程访问是关键概念。下面我将为每个主题提供详细的解释,并附上高质量示例。存储过程和函数: 存储过程和函数是预...

面试官:说说Oracle数据库result cache的原理是什么?

概述前面已经用实验给大家介绍了Result Cache相关内容,今天主要讨论一下Oracle 11g Result Cache的深层原理。从参数看,Oracle提供了Client Result Cac...

教你用 Netty 实现一个简单的 RPC

作者:莫那鲁道来源:https://www.cnblogs.com/stateis0/p/8960791.html众所周知,dubbo 底层使用了 Netty 作为网络通讯框架,而 Netty 的高性...