非常好用的 Excel 读写控件

处理 Excel 表格

如果你需要使用 Delphi 处理 Excel 表格,大概有几种方式。

  • 使用 ADOConnection,前提是你的电脑里面安装了:Microsoft Access Database Engine 2016 Redistributable,下载地址:https://www.microsoft.com/en-hk/download/details.aspx?id=54920;
  • Delphi 有好几个用于 Excel 的收费控件。
  • 用 Python 处理 Excel 的库,然后在 Delphi 里面使用 Python4Delphi 控件操作 Python。
  • 今天要介绍的 Delphi 开源代码库 Office4D。

几种不同方式的分析

  1. ADO 方式:此方式代码简单,导入后就是一个 TADODataSet,剩下的就是操作 DataSet 的代码了。都不用去分析有哪些字段。问题是微软的那个驱动可能有问题,如果 Excel 文件比较大,记录条数比较多,关闭 ADO 连接会耗时很长,ADOConnection1.Close 可能要等几十秒到几分钟才会执行完毕。如果在主线程里面执行,则会让程序直接冻结几十秒,显然不行。即便放到线程里面,如果程序导入结束立即退出,则线程里面的 ADOConnection1.Close 没执行完成,程序也无法退出。
  2. 收费控件,钱包不友好;
  3. 目标机器要专门安装 Python 环境,还要在 Python 环境里面用 pip 命令安装处理 Excel 的库,对用户不友好。除非专门做一个安装程序。
  4. Office4D 简单好用,开源免费。当然,导入数据的代码比 ADO 方式稍微多一点。

Office4D 的用法

复制代码
uses Office4D.Word,
  Office4D.Excel;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Fn: string;
  Workbook: IExcelWorkbook;
  Sheet: IExcelSheet;
  i: Integer;
  S, S1: string;
begin
  if not OpenDialog1.Execute() then
  begin
    Exit;
  end;

  Fn := Opendialog1.FileName;

  //Workbook 是接口,用完就不用管释放了。
  Workbook := TExcelWorkbookFactory.Create;
  Workbook.LoadFromFile(Fn);
  Sheet := Workbook.Sheets[0];

  for i := 0 to 26 do
  begin
    S := 'B' + i.ToString;
    Log(Sheet.Cell[S].AsString);
  end;

  Log('');

  for i := 0 to 30 do
  begin
    S := 'D' + i.ToString;
    S1 := Sheet.Cell[S].AsString;
    if (S1 = '') and (i > 2) then
    begin
      S1 := '结束:' + i.ToString;
      Log(S1);
      Break;
    end
    else
    begin
      Log(S1);
    end;
  end;

  Log('');

  for i := 0 to 8 do
  begin
    S := 'E' + i.ToString;
    Log(Sheet.Cell[S].AsString);
  end;
end;

procedure TForm1.Log(S: string);
begin
  Memo1.Lines.Add(S);
end;

说明

  • 注意 uses 部分,有 Office4D.Word. 它也能处理 Word 文件。它自己带的例子里面有代码。
  • 实际测试,打开大的 Excel 文件,导入结束后,退出程序,并不像 ADO 那样要等待很久。
  • 接口方式编程:Workbook 是接口。Delphi 的接口是引用计数,没用了会自动释放接口背后的对象实例。因此不需要管对象释放的问题。不用担心内存泄漏的问题。
相关推荐
Non-existent98716 天前
WPS批量清理单元格空白字符的4种方法-异常数字格式处理-实战
excel·wps
Channing Lewis16 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel
jarreyer17 天前
【数据分析绘图】excel绘图和bi工具区别
数据挖掘·数据分析·excel
chatexcel17 天前
ChatExcel Max使用教程:图片、PDF、网页与复杂Excel的一站式数据分析
数据分析·pdf·excel
cngkqy17 天前
excel从某一列中用match筛选匹配的数据
excel
qq_5469372717 天前
Excel批量转PDF_Word_图片,支持自动合并报表,效率翻倍。
pdf·word·excel
ai_coder_ai17 天前
在自动化脚本中操作excel文件
运维·自动化·excel
三千花灯17 天前
【Playwright】 自动化测试之参数化登录(Excel/CSV 数据源)
人工智能·机器学习·excel
罗政17 天前
AI工作流实现Excel全自动化(支持SQL)-案例:医院门诊排班表
人工智能·自动化·excel
小妖66617 天前
excel 怎么在单元格内容自动加上一段文字不能用公式
excel·vba