Delphi 导入excel

发布于:2025-05-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

Delphi导入Excel的常见方法可分为两种主流方案:基于OLE自动化操作Excel原生接口和利用第三方组件库。以下为具体实现流程及注意事项:


一、OLE自动化方案(推荐基础场景)

该方法通过COM接口调用本地安装的Excel程序,适合需要精确控制Excel行为的场景。

uses ComObj, Variants;

procedure ImportExcelToDB(const FileName: string);
var
  ExcelApp, WorkBook, WorkSheet: Variant;
  iRow, iCol, MaxRow, MaxCol: Integer;
begin
  try
    ExcelApp := CreateOleObject('Excel.Application');
    ExcelApp.Visible := False;  // 隐藏Excel界面
    WorkBook := ExcelApp.Workbooks.Open(FileName);
    WorkSheet := WorkBook.Worksheets[1];  // 选择第一个工作表

    // 获取有效数据范围
    MaxRow := WorkSheet.UsedRange.Rows.Count;
    MaxCol := WorkSheet.UsedRange.Columns.Count;

    // 遍历数据并插入数据库
    for iRow := 1 to MaxRow do
    begin
      for iCol := 1 to MaxCol do
      begin
        // 示例:获取单元格数据并处理
        DataValue := WorkSheet.Cells[iRow, iCol].Value;
        // TODO: 在此处添加数据库插入逻辑
      end;
    end;

  finally
    WorkBook.Close(False);
    ExcelApp.Quit;
    ExcelApp := Unassigned;  // 释放对象
  end;
end;

关键点

  • 需本地安装Excel且版本兼容69
  • 处理大数据量时需优化循环逻辑,避免内存泄漏10
  • 通过UsedRange动态获取数据边界,避免读取冗余空白单元格4

二、第三方组件库方案(推荐高性能场景)

使用如‌XLSReadWriteII‌或‌FlexCel‌等组件,直接解析Excel文件格式,无需依赖本地Excel安装。

// 使用XLSReadWriteII示例
procedure TForm1.ImportData;
begin
  XLSReadWriteII51.Filename := 'data.xlsx';
  XLSReadWriteII51.Read;  // 直接读取文件
  // 遍历数据(示例)
  for var r := 0 to XLSReadWriteII51.Sheets[0].LastRow do
  begin
    CellValue := XLSReadWriteII51.Sheets[0].AsString[0, r];
    // TODO: 数据转换及入库
  end;
end;

优势

  • 支持.xls/.xlsx格式,避免OLE版本兼容问题3
  • 性能更优,适合批量数据处理5

三、数据处理注意事项

  1. 类型转换
    • 处理日期/时间时需使用VarToDateTime转换Excel的浮点数值格式4
    • 空单元格需用VarIsNull判断,避免类型错误9
  2. 异常处理
    • 使用try...except包裹代码,捕获EOleException等异常6
  3. 性能优化
    • 批量插入数据库时使用事务提交,减少IO次数5
    • 禁用Excel界面更新:ExcelApp.ScreenUpdating := False10

四、扩展场景方案

  • 图像导入‌:通过Shapes.AddPicture方法导入图片至Excel单元格8
  • 格式保留‌:第三方组件支持直接复制单元格样式(如字体、颜色)3

选择方案时需权衡开发效率、性能需求及环境依赖。简单场景建议优先使用OLE自动化,企业级应用推荐集成第三方组件库。