dbgrid eh excel

本文介绍了一种使用Delphi将DBGrid组件的数据导出到Microsoft Excel的方法。通过创建Excel应用程序对象并遍历DBGrid的列和数据集记录,可以实现数据的自动填充。该方法适用于TDBGrid和TDBGridEh两种类型的组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unit DBGrdToExcel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB,ComObj, ExtDlgs, DBGridEhImpExp,
  GridsEh, DBGridEh;

  procedure DBGrid_To_Excel(DbgridName:TDBGrid);
  procedure DBGriehd_To_Excel(DbgridName:TDBGridEh);

implementation

//------ 打印 ------------
procedure DBGrid_To_Excel(DbgridName:TDBGrid);   //TDbGrid
var
  ExcelApp : Variant;
  ExcelData : string;
  i, j ,m : integer;
begin
    try
      ExcelApp:= CreateOleObject('Excel.Application');
    except
      Application.MessageBox('请检查是否安装有Microsoft Excel', '警告', mb_OK);
    end;
    try
    ExcelApp.Visible := true;
    ExcelApp.Caption := '应用程序调用 Microsoft Excel';
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkSheets[1].Activate;
    m := 1;
    for i := 1 to DbgridName.Columns.Count do
    begin
      if DbgridName.Columns[i - 1].Visible then
      begin
        ExcelData := DbgridName.Columns[i - 1].Title.Caption;
        ExcelApp.Cells[1, m].Value := ExcelData;
        application.ProcessMessages;
        inc(m);
      end;
    end;
    // 空数据 DbgridName---------------------------------
    if DbgridName.DataSource.DataSet.IsEmpty then exit;

    DbgridName.DataSource.DataSet.DisableControls;
    DbgridName.DataSource.DataSet.First;
    j := 2;
    while not DbgridName.DataSource.DataSet.Eof do
    begin
      m := 1;
      for i := 1 to DbgridName.Columns.Count do
      begin
        //(DbgridName.Columns[i-1].FieldName <> '')  FieldName 为空
        if DbgridName.Columns[i - 1].Visible and (DbgridName.Columns[i-1].FieldName <> '') then
        begin
        application.ProcessMessages;
        ExcelData:=DbgridName.DataSource.DataSet.FieldByName(DbgridName.Columns[i-

1].FieldName).asstring;
        ExcelApp.Cells[j, m].Value := ExcelData;
        inc(m);
        end;
      end;
      DbgridName.DataSource.DataSet.Next;
      j := j + 1;
    end;
    DbgridName.DataSource.DataSet.EnableControls;
  except
    Application.MessageBox('记录输出失败!', '警告', mb_OK);
    ExcelApp.Quit;
  end;
end;


//------ 打印 ------------
procedure DBGriehd_To_Excel(DbgridName:TDBGridEh);
var
  ExcelApp : Variant;
  ExcelData : string;
  i, j ,m : integer;
begin
    try
      ExcelApp:= CreateOleObject('Excel.Application');
    except
      Application.MessageBox('请检查是否安装有Microsoft Excel', '警告', mb_OK);
    end;
    try
    ExcelApp.Visible := true;
    ExcelApp.Caption := '应用程序调用 Microsoft Excel';
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkSheets[1].Activate;
    m := 1;
    for i := 1 to DbgridName.Columns.Count do
    begin
      if DbgridName.Columns[i - 1].Visible then
      begin
        ExcelData := DbgridName.Columns[i - 1].Title.Caption;
        ExcelApp.Cells[1, m].Value := ExcelData;
        application.ProcessMessages;
        inc(m);
      end;
    end;
    // 空数据
    if DbgridName.DataSource.DataSet.IsEmpty then exit;

    DbgridName.DataSource.DataSet.DisableControls;
    DbgridName.DataSource.DataSet.First;
    j := 2;
    while not DbgridName.DataSource.DataSet.Eof do
    begin
      m := 1;
      for i := 1 to DbgridName.Columns.Count do
      begin
        if DbgridName.Columns[i - 1].Visible and (DbgridName.Columns[i-1].FieldName <> '') then
        begin
        application.ProcessMessages;
        ExcelData:=DbgridName.DataSource.DataSet.FieldByName(DbgridName.Columns[i-

1].FieldName).asstring;
        ExcelApp.Cells[j, m].Value := ExcelData;
        inc(m);
        end;
      end;
      DbgridName.DataSource.DataSet.Next;
      j := j + 1;
    end;
    DbgridName.DataSource.DataSet.EnableControls;
  except
    Application.MessageBox('记录输出失败!', '警告', mb_OK);
    ExcelApp.Quit;
  end;
end;
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值