如何将几个DBGRID里的内容导入同一个EXCEL表中?

前言:

  在软件实际制作中,为节省开发成本和开发周期,一些软件人员通常会吧DBGrid中的数据直接导出到Excel表中,而先前能看到的函数仅仅只能在WorkBook的一个Sheet中导入数据,不支持多Sheet!。

单元应用:

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ActiveX, ComObj,
  Excel2000, OleServer;

测试环境:

  OS:Win2k Pro;Excel2k;Delphi6.0

源程序:  

{
功能描述:把DBGrid输出到Excel表格(支持多Sheet)
设计:CoolSlob
日期:2002-10-23
支持:CoolSlob@163.com
调用格式:CopyDbDataToExcel([DBGrid1, DBGrid2]);
}
procedure CopyDbDataToExcel(Args: array of const);
var
  iCount, jCount: Integer;
  XLApp: Variant;
  Sheet: Variant;
  I: Integer;
begin
  Screen.Cursor := crHourGlass;
  if not VarIsEmpty(XLApp) then
  begin
    XLApp.DisplayAlerts := False;
    XLApp.Quit;
    VarClear(XLApp);
  end;

  try
    XLApp := CreateOleObject('Excel.Application');
  except
    Screen.Cursor := crDefault;
    Exit;
  end;

  XLApp.WorkBooks.Add;
  XLApp.SheetsInNewWorkbook := High(Args) + 1;

  for I := Low(Args) to High(Args) do
  begin
    XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;
    Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];
   
    if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
    begin
      Screen.Cursor := crDefault;
      Exit;
    end;

    TDBGrid(Args[I].VObject).DataSource.DataSet.first;
    for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
      Sheet.Cells[1, iCount + 1] :=
          TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;
         
    jCount := 1;
    while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
    begin
      for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
        Sheet.Cells[jCount + 1, iCount + 1] :=
            TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;
           
      Inc(jCount);
      TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
    end;
  end;

  XlApp.Visible := True;
  Screen.Cursor := crDefault;
end;

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在他人的DBGridEh导出到Excel的基础上进行改进,增加功能如下: 1、支持多个DBGridEH同时导出到Excel的不同Sheet页 2、进度条与数据进度保持一致 3、增加了进度百分比显示 //调用方法: procedure TForm1.Button1Click(Sender: TObject); var DbOut: TDBGridEhToExcel; i: integer; begin try DbOut := TDBGridEhToExcel.Create(Self); for i := 0 to 9 do //初始化数组 begin DbOut.DBGridEhRecAry[i].TempDBGridEh := nil; DbOut.DBGridEhRecAry[i].TitleName := ''; DbOut.DBGridEhRecAry[i].SheetTabName := ''; end; //有多少个DBGridEh的数据要导出,此处示两个 DbOut.DBGridEhRecLength := 2; //统计结果一 DbOut.DBGridEhRecAry[0].TempDBGridEh := dbgSpotCheckCount; DbOut.DBGridEhRecAry[0].TitleName := '统计结果一'; DbOut.DBGridEhRecAry[0].SheetTabName := '统计结果一'; //统计结果二 DbOut.DBGridEhRecAry[1].TempDBGridEh := dbgValuationCount; DbOut.DBGridEhRecAry[1].TitleName := '统计结果二'; DbOut.DBGridEhRecAry[1].SheetTabName := '统计结果二'; DbOut.TitleName := '统计结果'; DbOut.ShowProgress := True; DbOut.ShowOpenExcel := True; DbOut.ExportToExcel; finally FreeAndNil(DbOut); end; end; 还可以改进的地方,比如: 1、标题栏占用几行,字体,字体颜色,字体大小,背景颜色可以封装提供设置方法; 2、字段标题字体,字体颜色,字体大小; 3、格样式设置; 就是动态数据不会封装到类面,如果有高人封装得更好一些,请发一份我;
DBGrid 是 Delphi 常用的数据显示控件,如果需要将 DBGrid 的数据导出到 Excel 文件,也可以使用 OLE 技术来实现。下面是一个简单的示例代码: ```delphi var ExcelApp: Variant; // 声明 Excel 应用程序对象 Sheet: Variant; // 声明工作对象 i, j: Integer; begin ExcelApp := CreateOleObject('Excel.Application'); // 创建 Excel 应用程序对象 ExcelApp.Workbooks.Add(1); // 添加一个工作簿 Sheet := ExcelApp.Workbooks[1].Worksheets[1]; // 获取第一个工作 // 写入头 for j := 0 to DBGrid1.Columns.Count - 1 do begin Sheet.Cells[1, j + 1].Value := DBGrid1.Columns[j].Title.Caption; end; // 写入数据 for i := 0 to DBGrid1.DataSource.DataSet.RecordCount - 1 do begin DBGrid1.DataSource.DataSet.RecNo := i + 1; for j := 0 to DBGrid1.Columns.Count - 1 do begin Sheet.Cells[i + 2, j + 1].Value := DBGrid1.Fields[j].AsString; end; end; ExcelApp.Workbooks[1].SaveAs('C:\Test.xlsx'); // 将工作簿另存为 Test.xlsx 文件 ExcelApp.Quit; // 关闭 Excel 应用程序 end; ``` 在这个示例,我们首先通过 `CreateOleObject` 函数创建了一个 Excel 应用程序对象,并通过 `Add` 方法添加了一个工作簿。然后,我们通过 `Worksheets` 属性获取第一个工作,并将 DBGrid 头和数据写入 Excel 文件。最后,我们通过 `SaveAs` 方法将工作簿另存为指定的文件,并通过 `Quit` 方法关闭 Excel 应用程序。 需要注意的是,在使用 DBGrid 导出数据时,我们需要先将当前记录移到第一条记录(`DBGrid1.DataSource.DataSet.RecNo := 1;`),然后再逐条读取数据写入 Excel 文件。此外,如果 DBGrid 显示的是一个 SQL 查询的结果集,需要先将该结果集转换为一个独立的数据集,否则可能会出现写入数据不完整的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日总是我哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值