起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 543|回复: 5

【搞定】如何将表格文档导出到EXCEL文件中去**

[复制链接]
发表于 2006-12-30 16:03:23 | 显示全部楼层 |阅读模式
有没有详细的模板或者参考代码?

比较急。
回复

使用道具 举报

 楼主| 发表于 2006-12-30 16:04:44 | 显示全部楼层
SHEET表格,不是DATAGRID
回复 支持 反对

使用道具 举报

发表于 2006-12-30 17:06:22 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-31 08:07:26 | 显示全部楼层
procedure TMainForm.CopyInfoAreasToDstSheet(ASrcData: TInfo; ASrcSheet, ADstSheet: TSheet;
  AAreas: TAreaList; var ALeft, ATop: Integer);
var
  I, J, lLeft, lTop, TempLeft, TempRight, TempCount, lOldRowCount: Integer;
  lDataset: TDataset;
  TempArea, lNextArea, lEndArea, lSubArea: TSheetArea;
  lIsNullDataset: Boolean;
begin
  AAreas.SortAreaBounds;
  for I := 0 to AAreas.Count - 1 do
  begin
    TempArea := AAreas[I];
    //¿¼Âǵ½Ò³Í·ÇøÓòµÈûÓÐÊý¾Ý¼¯µÄÇøÓò£¬¾ÍÖ±½Ócopy¹ýÀ´¡£
    if not (TempArea is TDataSheetArea) then
    begin
      //***************¿¼ÂÇҳͷÇøÓòµÈûÓÐÊý¾Ý¼¯µÄÇøÓò*********************//
      TempCount := TempArea.Bottom - TempArea.Top;
         //ÉèÖÃÿÐеÄÐиß
      lOldRowCount := ADstSheet.RowCount;
      ADstSheet.RowCount := ADstSheet.RowCount + TempCount;
      for J := 0 to TempCount - 1 do
        ADstSheet.RowHeights[lOldRowCount + J] := ASrcSheet.RowHeights[TempArea.Top + J];

      TempLeft := TempArea.Left;
      TempRight := TempArea.Right;
      ADstSheet.CopyClientSection(ASrcSheet, Types.Rect(TempLeft, TempArea.Top, TempRight, TempArea.Bottom), ALeft, ATop, False, False, TOutProp.opAll, False);
      ATop := ATop + TempCount;
    end
    else
    begin
      //°´Êý¾Ý¼¯µÄ¼Ç¼ÊýÌí¼ÓÇøÓò
      lDataset := ASrcData.DatasetByID((TempArea as TDataSheetArea).DataSetDefID);
      lDataset.First;
      if lDataset.Eof then
        lIsNullDataset := True
      else
        lIsNullDataset := False;

      ADstSheet.CopyClientSection(ASrcSheet, TempArea.TopFixRect, ALeft, ATop, False, False, TOutProp.opAll, False);
      ATop := ATop + TempArea.TopFixRows;

      while (not lDataset.Eof) or lIsNullDataset do
      begin
        lIsNullDataset := False;
        //***************¿½±´µ±Ç°ÇøÓòÖе±Ç°ÇøÓòµÄÍ·µ½µÚÒ»¸ö×ÓÇøÓòÍ·µÄ²¿·Ö********//
        if TempArea.SubAreas.Count > 0 then
        begin
          lSubArea := TempArea.SubAreas[0];
             //ÉèÖÃÿÐеÄÐиß
          TempCount := lSubArea.Top - TempArea.Top;
          lOldRowCount := ADstSheet.RowCount;
          ADstSheet.RowCount := ADstSheet.RowCount + TempCount;
          for J := 0 to TempCount - 1 do
            ADstSheet.RowHeights[lOldRowCount + J] := ASrcSheet.RowHeights[TempArea.Top + J];

          ADstSheet.CopyClientSection(ASrcSheet, Types.Rect(TempArea.Left, TempArea.Top, TempArea.Right, lSubArea.Top), ALeft, ATop, False, False, TOutProp.opAll, False);
          ATop := ATop + TempCount;//Ö»ÉèÖÃÁËtop£¬ ûÓÐÉèÖÃleft
          CopyInfoAreasToDstSheet(ASrcData, ASrcSheet, ADstSheet, TempArea.SubAreas, ALeft, ATop);
          //**********************************************************//
        end else
        begin
          //******Èç¹ûûÓÐ×ÓÇøÓò£¬ÄÇô¾Í°Ñµ±Ç°ÇøÓò¿½±´¹ýÈ¥*********//
          TempCount := TempArea.ClientHeight;
             //ÉèÖÃÿÐеÄÐиß
          lOldRowCount := ADstSheet.RowCount;
          ADstSheet.RowCount := ADstSheet.RowCount + TempCount;
          for J := 0 to TempCount - 1 do
            ADstSheet.RowHeights[lOldRowCount + J] := ASrcSheet.RowHeights[TempArea.Top + J];

          if Assigned(TempArea.ParentArea) then
          begin
            TempLeft := TempArea.ParentArea.Left;
            TempRight := TempArea.ParentArea.Right;
          end else
          begin
            TempLeft := TempArea.Left;
            TempRight := TempArea.Right;
          end;
          ADstSheet.CopyClientSection(ASrcSheet, TempArea.ClientRect{ Types.Rect(TempLeft, TempArea.Top, TempRight, TempArea.Bottom)}, ALeft, ATop, False, False, TOutProp.opAll, False);
          ATop := ATop + TempCount;
          //**********************************************************//
        end;

        lDataset.Next;
      end;
      //********copy Á½¸öͬ¼¶ÇøÓòÖ®¼äµÄ¿Õ¼ä£¨µ±Ç°ÇøÓòϵÄÖ÷ÇøÓòµÄ¿Õ¼ä)**********//
      if I < AAreas.Count - 1 then
      begin
        lNextArea := AAreas[I+1];
        if TempArea.Bottom < lNextArea.Bottom then
        begin
          TempCount := lNextArea.Top - TempArea.Bottom;
             //&Eacute;è&Ouml;&Atilde;&Atilde;&iquest;&ETH;&ETH;&micro;&Auml;&ETH;&ETH;&cedil;&szlig;
          lOldRowCount := ADstSheet.RowCount;
          ADstSheet.RowCount := ADstSheet.RowCount + TempCount;
          for J := 0 to TempCount - 1 do
            ADstSheet.RowHeights[lOldRowCount + J] := ASrcSheet.RowHeights[TempArea.Bottom + J];

          if Assigned(TempArea.ParentArea) then
          begin
            TempLeft := TempArea.ParentArea.Left;
            TempRight := TempArea.ParentArea.Right;
          end else
          begin
            TempLeft := TempArea.Left;
            TempRight := TempArea.Right;
          end;
          ADstSheet.CopyClientSection(ASrcSheet, Types.Rect(TempLeft, TempArea.Bottom, TempRight, lNextArea.Top), ALeft, ATop, False, False, TOutProp.opAll, False);
          ATop := ATop + TempCount;
        end;
      end
      //**********************************************************//
      //********&iquest;&frac12;±&acute;×&icirc;&ordm;ó&Ograve;&raquo;&cedil;&ouml;×&Oacute;&Ccedil;&oslash;&Oacute;ò&micro;&frac12;&micro;±&Ccedil;°&Ccedil;&oslash;&Oacute;ò&Auml;&copy;&micro;&Auml;&micro;±&Ccedil;°&Ccedil;&oslash;&Oacute;ò&micro;&Auml;&sup2;&iquest;·&Ouml;**************//
      else if I = AAreas.Count - 1 then
      begin
        lEndArea := AAreas[AAreas.Count - 1];
        if Assigned(lEndArea.ParentArea) and (lEndArea.Bottom < lEndArea.ParentArea.Bottom) then
        begin
          TempCount := lEndArea.ParentArea.Bottom - lEndArea.Bottom;
             //&Eacute;è&Ouml;&Atilde;&Atilde;&iquest;&ETH;&ETH;&micro;&Auml;&ETH;&ETH;&cedil;&szlig;
          lOldRowCount := ADstSheet.RowCount;
          ADstSheet.RowCount := ADstSheet.RowCount + TempCount;
          for J := 0 to TempCount - 1 do
            ADstSheet.RowHeights[lOldRowCount + J] := ASrcSheet.RowHeights[lEndArea.Bottom + J];

          ADstSheet.CopyClientSection(ASrcSheet, Types.Rect(lEndArea.ParentArea.Left, lEndArea.Bottom, lEndArea.ParentArea.Right, lEndArea.ParentArea.Bottom), ALeft, ATop, False, False, TOutProp.opAll, False);
          ATop := ATop + TempCount;
        end;
      end;
      //**********************************************************//
    end;
  end;
end;


这段代码里哪一段是循环取SHEET数据的?看的晕乎晕乎的。现在EXCEL表中只能返回第一行数据。
回复 支持 反对

使用道具 举报

发表于 2006-12-31 09:09:54 | 显示全部楼层
楼主,现在导出excel已经不需要写这么多代码了,

请看

http://bbs.justep.com/showthread.ph...opySheetToExcel
的2、3楼
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-31 09:42:59 | 显示全部楼层
非常感谢贾老师!!!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 00:21 , Processed in 0.041379 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表