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

2016-02-19 19:35 9 1 收藏

下面,图老师小编带您去了解一下如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

 

  http://dev.csdn.net/article/53/53442.shtm
  如何将几个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;

  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;//  (1)
    XLApp.SheetsInNewWorkbook := High(Args) + 1;//  (2)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    XLApp.SheetsInNewWorkbook := High(Args) + 1;
    XLApp.WorkBooks.Add; 
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    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];

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      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;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      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;
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  经过测试,上面这段代码确实有问题:(有兴趣的朋友可以自己测试一下)

  比如:
  先form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid3]);//OK
  再form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid,dbgrid4]);//这样就出错,提示:无效索引

  如果这样:
  先form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid3,dbgrid4]);//OK
  再form1.CopyDbDataToExcel([dbgrid1,dbgrid2]);//OK

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  总之:先少后多,就出错...
  原因就出在上面代码(1),(2)两段上,经过测试,正确的应该将(1),(2)代码对调,才能保证不出错....
  


来源:http://www.tulaoshi.com/n/20160219/1621398.html

延伸阅读
一个好用的DBGRID --- VC数据库开发之二 作者:陈松乐 下载本文配套代码一 (演示CGridCtrl的使用) 下载本文配套代码二 (演示与CMYODBC的配合使用) 一、引言 在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想...
标签: excel
如何将Excel中多个不同的工作表汇总成一张总表   Excel多个工作表汇总 A)创建一张汇总表,选中数量下面的单元格。 B)点击数据合并计算,函数里面填求和。 C)在引用位置,点击带红色箭头的框框。 D)点击A供应商这张工作表,选中参与计算的数据范围。 E)点击添加在所有引用位置出现A供应商...
  二。导库的VB程序 这个工程要使用一些对象库,在数据库访问方面,决定使用ADO(ActiveX Data Objects),对于使用过ASP的人,这个名字应该非常熟悉了,实际上,它在VB中的应用也是几乎一样的,由于要操作Excel,还要引用一个扩展的对象库。点菜单中的“工程”---“引用”,选择“Microsoft ActiveX Data ...
本文示例源代码下载     CGridCtrl_demo19_01.zip为演示CGridCtrl的使用 CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用 一、引言 在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Bui...
365天拍摄同一个灯塔   365摄影计划是一个很流行的拍摄项目,即一年365天每天拍一张照片。巴西摄影师Tunisio Alves Filho则给自己提出了更大的挑战,不仅每天拍摄一张照片,而且拍摄的是同一个灯塔著名景点Barra灯塔。 为同一个灯塔拍摄365张不同的照片,这有可能实现吗?你能想出多少种拍摄建筑的方法?这个项目不仅考验摄影...

经验教程

734

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部