各位:下面的报表如何实现:

现有一下若干条数据:(一次性查询出来的)
用户名称  用户信息  编号  产品批号    重量
   A1        B1       E1       C1      D1
   ........(用户A1共有11条记录)
   A1        B1       E1       C11     D11
   A2        B2       E2       C12     D12
   ........(用户A2共有4条记录)
   A2        B2       E2       C15     D15
要求打印出来的报表格式是这样的(一张报表最多只能打印5条记录):
表头: 用户名称:   用户信息:   (注意不同用户不能在同一张报表上)
       重量:(这一张报表上的记录的重量合计) 编号:  (如果一个用户在一张报表上不能打印完要标出这是第几张,如果能够一张打完则不用标记。)表体:产品批号:  重量:
举例:上面共有15条记录,但是有2个用户,所以就要打印4张(因为A1用户有11条,要打印3张,而不同用户不能在同一报表上,所以A2用户要一张)第一页 表头:用户名称:A1  用户信息:B1  重量合计:D1+..+D5 编号:E1-1 (-1是指三张中的第一张的意思)
         表体:产品批号:C1   重量D1
               ...........
               产品批号:C5   重量D5  (一张报表最多只能打印5条记录)第二页  表头:用户名称:A1   用户信息:B1  重量:D6+..+D10 编号:E1-2 (-2是指三张中的第二张的意思)
        表体:产品批号:C6   重量D6
               ...........
              产品批号:C10   重量D10  (一张报表最多只能打印5条记录)第三页  表头:用户名称:A1   用户信息:B1  重量:D11 编号:E1-3 (-3是指三张中的第三张的意思)
        表体:产品批号:C11   重量D11  (只有一条记录)第四页  表头:用户名称:A2   用户信息:B2  重量:D1+..+D5 编号:E2 (因为就一张所以不用标识)
        表体:产品批号:C12   重量D12
               ...........
              产品批号:C15   重量D15  (只有4条记录)我现在的想法是:想采用主从表的做法,让主表去强行换页(这样似乎只能解决不同用户换页的问题) 而每页上的重量合计 ,以及如果一个用户是多页,如何标识第几页的问题好象没有解决啊!希望高手指点解决,或者提供一个解决的思路。谢谢!分不够可以再加!谢谢!

解决方案 »

  1.   

    这个你可用Delphi控制Excel来实行。我建议你用Delphi7.0版,自带一个对Excel操作的控件,特别好使。
      

  2.   

    以下代码希望你好好看看:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Excel2000, OleServer;type
      TForm1 = class(TForm)
        ExcelWorkbook1: TExcelWorkbook;
        ExcelWorksheet1: TExcelWorksheet;
        ExcelApplication1: TExcelApplication;
        ExcelWorksheet2: TExcelWorksheet;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    bexeclvisible: boolean;
    i1,i2,j1,j2: integer;
    begin
        if  application.MessageBox('启动Excel','请回答',MB_yesno+mb_defbutton2)<>idno
        then
        begin
        bexeclvisible:=true;
        end
        else
        bexeclvisible:=false;
        if  bexeclvisible then
        excelapplication1.Visible[0]:=true;
        try
          excelapplication1.Connect;
          except
          showmessage('error');
          abort;
          end;
        excelapplication1.Caption:='转换';
        excelapplication1.Workbooks.add('d:\aa\扫描电镜(第一天)5.xls',0);
        excelworkbook1.ConnectTo(excelapplication1.Workbooks[1]);
        excelworksheet1.ConnectTo(excelworkbook1.Worksheets[1] as  _worksheet);
        excelworksheet2.ConnectTo(excelworkbook1.Worksheets[2] as  _worksheet);
        i1:=3;
        j1:=2;
        i2:=1;
        j2:=1;    while datetimetostr(excelworksheet1.Cells.Item[3,2].value)<>'' do
        begin
            excelworksheet2.Cells.Item[i2,j2].value:=datetimetostr(excelworksheet1.Cells.Item[i1,j1].value);        excelworksheet2.Cells.Item[i2,j2+1].value:=excelworksheet1.Cells.Item[i1+3,j1].value;
            excelworksheet2.Cells.Item[i2,j2+2].value:=excelworksheet1.Cells.Item[i1+3,j1+1].value;
            excelworksheet2.Cells.Item[i2,j2+3].value:=excelworksheet1.Cells.Item[i1+3,j1+2].value;
            excelworksheet2.Cells.Item[i2,j2+4].value:=excelworksheet1.Cells.Item[i1+3,j1+3].value;
            excelworksheet2.Cells.Item[i2,j2+5].value:=excelworksheet1.Cells.Item[i1+3,j1+4].value;
            excelworksheet2.Cells.Item[i2,j2+6].value:=excelworksheet1.Cells.Item[i1+3,j1+5].value;
            excelworksheet2.Cells.Item[i2,j2+7].value:=excelworksheet1.Cells.Item[i1+3,j1+6].value;
            excelworksheet2.Cells.Item[i2,j2+8].value:=excelworksheet1.Cells.Item[i1+3,j1+7].value;
            excelworksheet2.Cells.Item[i2,j2+9].value:=excelworksheet1.Cells.Item[i1+3,j1+8].value;
            excelworksheet2.Cells.Item[i2,j2+10].value:=excelworksheet1.Cells.Item[i1+3,j1+9].value;
            excelworksheet2.Cells.Item[i2,j2+11].value:=excelworksheet1.Cells.Item[i1+3,j1+10].value;
            excelworksheet2.Cells.Item[i2,j2+12].value:=excelworksheet1.Cells.Item[i1+3,j1+11].value;
            i2:=i2+1;
            i1:=i1+12;    end;    excelworksheet2.SaveAs('d:\aa\扫描电镜(第一天)5.xls');
        showmessage('OK!');
        excelapplication1.Disconnect;
        excelapplication1.Quit;end;
    end.