国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

如何將幾個(gè)DBGRID里的內(nèi)容導(dǎo)入同一個(gè)EXCEL表中....的問(wèn)題

2019-11-18 18:02:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
 

http://dev.csdn.net/article/53/53442.shtm
如何將幾個(gè)DBGRID里的內(nèi)容導(dǎo)入同一個(gè)Excel表中?
在軟件實(shí)際制作中,為節(jié)省開(kāi)發(fā)成本和開(kāi)發(fā)周期,一些軟件人員通常會(huì)吧DBGrid中的數(shù)據(jù)直接導(dǎo)出到Excel表中,而先前能看到的函數(shù)僅僅只能在WorkBook的一個(gè)Sheet中導(dǎo)入數(shù)據(jù),不支持多Sheet!。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

單元應(yīng)用:
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];

    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;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
經(jīng)過(guò)測(cè)試,上面這段代碼確實(shí)有問(wèn)題:(有興趣的朋友可以自己測(cè)試一下)

比如:
先f(wàn)orm1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid3]);//OK
再form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid,dbgrid4]);//這樣就出錯(cuò),提示:無(wú)效索引

如果這樣:
先f(wàn)orm1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid3,dbgrid4]);//OK
再form1.CopyDbDataToExcel([dbgrid1,dbgrid2]);//OK

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
總之:先少后多,就出錯(cuò)...
原因就出在上面代碼(1),(2)兩段上,經(jīng)過(guò)測(cè)試,正確的應(yīng)該將(1),(2)代碼對(duì)調(diào),才能保證不出錯(cuò)....



上一篇:遠(yuǎn)程得到任意遠(yuǎn)程N(yùn)T主機(jī)帳號(hào)List的源代碼

下一篇:GetPartFilter+SumStocklist

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門(mén)圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 莎车县| 红桥区| 东至县| 邵东县| 吉林省| 潞城市| 无为县| 香河县| 连平县| 义乌市| 深泽县| 江陵县| 柞水县| 凉城县| 丹江口市| 庆城县| 麻城市| 喀喇| 万荣县| 榆中县| 增城市| 望江县| 天台县| 玛沁县| 凤翔县| 桂平市| 平乡县| 阿坝县| 南丰县| 二连浩特市| 怀宁县| 榕江县| 洪泽县| 额敏县| 二连浩特市| 霍邱县| 阿合奇县| 朝阳区| 金华市| 偃师市| 两当县|