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

lazarus(free pascal) 操控wps或Excel

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

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.



相关文章

那些技术—Listview的性能提高篇(listview提高效率)

ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。 · 1.在adapter中的...

Android之自定义ListView(一)(android 自定义view绘制流程)

PS:自定义View是Android中高手进阶的路线.因此我也打算一步一步的学习.看了鸿洋和郭霖这两位大牛的博客,决定一步一步的学习,循序渐进.学习内容:1.自定义View实现ListView的Ite...

ExpandListView 的一种巧妙写法(三十的另一种写法)

ExpandListView大家估计也用的不少了,一般有需要展开的需求的时候,大家不约而同的都想到了它然后以前自己留过记录的一般都会找找以前自己的代码,没有记录习惯的就会百度、谷歌,这里吐槽一下,好几...

Android主流UI开源库整理(android完整开源项目)

前言最近老大让我整理一份 Android主流UI开源库 的资料,以补充公司的Android知识库。由于对格式不做特别限制,于是打算用博客的形式记录下来,方便查看、防丢并且可以持续维护、不断更新。标题隐...

打通 JAVA 与内核系列之 一 ReentrantLock 锁的实现原理

写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁)。其中synchronized锁是JAVA语言层面提供的能力,在此不...

Go 语言中的 RWMutex 源码解析、使用场景及应用分析

Go 语言标准库的 sync 包提供了一些非常重要的并发原语来帮助程序开发者处理并发任务。本文将详细解析 sync 包中的 RWMutex,即读写互斥锁(Reader/Writer Mutex),并结...