非常好用的 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 的接口是引用计数,没用了会自动释放接口背后的对象实例。因此不需要管对象释放的问题。不用担心内存泄漏的问题。
相关推荐
海兰1 小时前
【web应用】Excel 项目数据自动化分析系统(AI 驱动分析)详细设计与部署指南(附源代码)
前端·人工智能·自动化·excel
2501_930707789 小时前
使用 C# 代码读取或删除 Excel 文档属性
excel
hikktn9 小时前
Excel 日期格式统一治理:从“显示不全“到“自动兼容“的完整方案
windows·python·excel
霸道流氓气质11 小时前
Spring Boot 大数据量 Excel 导入导出功能实现指南
spring boot·后端·excel
霸道流氓气质11 小时前
Java 单元测试生成大量 Excel 测试数据实战指南
java·单元测试·excel
IT WorryFree12 小时前
FortiGate常用资产 OID 清单,配套 Excel 台账模板字段
网络·人工智能·excel
MyFreeIT12 小时前
Excel Enable Content
excel
E_ICEBLUE12 小时前
将 Excel 表格插入 Word 文档的三种实用方案(Python 自动化)
python·word·excel
俊哥工具12 小时前
027免费开源硬盘检测工具,一键查看健康度,杜绝数据丢失
pdf·电脑·word·excel·音视频
不恋水的雨1 天前
easyexcel快速填充大数据量不覆盖后面的行解决方式
java·excel·poi