在Delphi中操作Excel大部分人已经轻车熟路,因为Delphi中有一套ADO组件用于操作微软的相关产品,无论是MsSql、Access还是Excel都可以轻松搞定,网上的例子也比较多。
但用Lazarus操作Excel的例子比较少,能搜到的大部分也是通过控件FPSpreadsheet进行,虽然操作Excel比较方便,但不是我想要的方式,我是想把Excel当作一个数据表来操作。
最后找到一套开源的数据库控件ZeosDBO解决了这个问题。
具体操作:
放置一个ZConnection组件,命名为ConMain设置它的Protocol为ado,然后设置它的database为ado的链接串就行了,具体代码如下:

const
  ConStrExcel2007: string =
    'Provider =Microsoft.ACE.OLEDB.12.0; Extended Properties = Excel 8.0; Data Source = %s';
  ConStrExcel2003:string='Provider = Microsoft.Jet.OLEDB.4.0; Extended Properties = Excel 8.0; Data Source =%s';
var
  ExcelFileName: string;   
begin
  if OpenDialog1.Execute then
  begin
    ConMain.Disconnect;
    ExcelFileName := OpenDialog1.FileName;
    ConMain.Protocol :='ado' ;
    ConMain.Database:=format(ConStrExcel2007, [ExcelFileName]);
    ConMain.Connect;
  end;
end;        

说明:ConStrExcel2007这个ADO链接串的写法支持最新的Excel2007及以上版本,也就是.xlsx后缀的文件,也支持Excel2003以下的版本。
ConStrExcel2003这个ADO链接串的写法仅支持Excel2003及以下的版本。

 所以推荐用第一种写法,除非你的系统不支持

其它操作就和Delphi里面用ADO操作一样了,就不赘述了。

另外,还有一个坑就是当前最新版的ZeosDBO是Zeos 7.3-alpha版,这个版操作Excel可以正常连接,但是打开相关表sheet就会报异常,所以推荐使用当前的稳定版Zeos 7.2.14,或者等7.3版稳定了再用。
ZeosDBO组件的下载地址 https://sourceforge.net/projects/zeoslib/

欢迎留言讨论使用Lazarus过程中遇到的问题,Good Luck!


本文由 王守红 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论