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

lazarus(free pascal) 操控wps或Excel

maynowei7个月前 (10-19)技术知识129

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.



相关文章

出售闲置原型素材来赚钱,上传作品,即可收上万元收入

出售闲置原型素材来赚钱。产品经理每年设计出大量的原型作品和组件、元件库、交互原型模板等作品,如果项目结束,你的原型就失去了作用,而有需求的人却找不到这样的作品。现在我们发现这样一家元件库、原型模板、素...

单片机C语言编程,心得都在这里了

单片机写代码总踩坑,头文件被无视,老工程师的经验哪里来?前几天写8x8矩阵键盘的程序,搞了三天代码一直乱报错。后来发现自己连头文件是什么都不清楚,之前写的都是小程序,压根没碰过.h文件。看别人的程序都...

机器人需求驱动导航新SOTA,成功率提升15%!浙大&vivo联手打造

CogDDN团队 投稿量子位|公众号QbitAI让机器人像人一样边看边理解,来自浙江大学和vivo人工智能实验室的研究团队带来了新进展。正如视频所展示的,机器人在复杂的室内环境中不仅能自主探索,还具备...

Flutter 之 ListView(flutter框架)

在 Flutter 中,ListView 可以沿一个方向(垂直或水平方向)来排列其所有子 Widget,常被用于需要展示一组连续视图元素的场景ListView 构造方法ListView:仅适用于列表中...

掌握C语言多线程:高效并发编程指南

一、多线程基础概念介绍多线程编程是现代软件开发中提高程序性能和响应性的重要技术。在C语言中,pthread(POSIX Threads)库是实现多线程编程的标准工具。本节将通俗易懂地介绍多线程的核心概...

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

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