可以用变量 xh1,xh2
j:=query1.recordcount;
while not query1.eof
do 
begin
xh1:=xh1+query1.values['字段名1'];
xh2:=xh2+query1.values['字段名2'];
query1.next;
end;
app.cells[j+3,1]:=xh1;
app.cells[j+3,2]:=xh2;

解决方案 »

  1.   

    是个办法。可是如果我把数据导出为excel后再统计,又如何做呢?
      

  2.   

    row:=2;//数据开始输入行
    while not query1.eof do
    begin
          app.cell[row,1]:=query1.fieldbyname('商品名').asstring;
          app.cell[row,2]:=query1.fieldbyname('field1').asstring;       
          app.cell[row,3]:=query1.fieldbyname('field2').asstring;
          inc(row);
          query1.next;
    end;app.cell[row,1]:='合计';
    app.cell[row,2].FormulaR1C1:='=sum(b2:b'+inttostr(row-1)+')';
    app.cell[row,3].FormulaR1C1:='=sum(c2:c'+inttostr(row-1)+')';
      

  3.   

    ExcelWorksheet1.Cells.Item[17,2]:='=sum(b2:b10)';
      

  4.   

    请教楼上,我用该方法计算合计数目时,出现如下错误: MIcrosoft Excel不能计算该公式。公式中的单元格引用指向的是公式结果,从而造成循环引用。请尝试:
    ?如属意外,请单击“确定”按钮。系统将显示“循环引用”工具栏,帮助您改正公式。
    ?有关循环引用及改正的详细内容,请单击“帮助”按钮。
    ?如果不作改动,请单击“取消”按钮。导出完成后,我查看导出的excel文件,合计行计算正常,但是我如何把这个不是讨厌的提示框去掉?下面是我的部分代码。请教各位。
    //导出数据,并计算合计。
    procedure tfrmmain.writexls(sheet:olevariant);
    var row,col:integer;
    begin
      //写入excel;
     // sheet.cells[2,1]:='部门:'+adoquery1.fieldbyname('dname').value;
      row:=4;
      while not adoquery2.eof do
      begin
       for col:=1 to 16 do
       sheet.cells(row,col):=adoquery2.fields[col-1].asstring;
       adoquery2.next;
       inc(row);
      end;
      sheet.cells[row,1]         :='合计';
      sheet.cells.item[row,3]:='=sum(C4:C'+inttostr(row-1)+')';
      sheet.cells.item[row,4]:='=sum(D4:d'+inttostr(row-1)+')';
      sheet.cells.item[row,5]:='=sum(e4:e'+inttostr(row-1)+')';
      sheet.cells.item[row,6]:='=sum(f4:f'+inttostr(row-1)+')';
      sheet.cells.item[row,7]:='=sum(g4:g'+inttostr(row-1)+')';
      sheet.cells.item[row,8]:='=sum(h4:h'+inttostr(row-1)+')';
      sheet.cells.item[row,9]:='=sum(i4:i'+inttostr(row-1)+')';
      sheet.cells.item[row,10]:='=sum(j4:j'+inttostr(row-1)+')';
      sheet.cells.item[row,11]:='=sum(k4:k'+inttostr(row-1)+')';
      sheet.cells.item[row,12]:='=sum(l4:l'+inttostr(row-1)+')';
      sheet.cells.item[row,13]:='=sum(m4:m'+inttostr(row-1)+')';
      sheet.cells.item[row,14]:='=sum(n4:n'+inttostr(row-1)+')';
      sheet.cells.item[row,15]:='=sum(o4:o'+inttostr(row-1)+')';
    end;
    因为我的程序的导出分为好几个sheet,所以要循环引用这个过程,我用断点调试发现第一次引用这个过程时正常,到第二次就会出现上面的提示。
    请教如何解决这个问题。
    再放100分。
      

  5.   

    用Ehlib吧,有最后一行统计功能,也可以很方便地把数据导入Excel。
      

  6.   

    我特意参考MSDN写了下面的代码,在D6/Excel2000中运行正常:
    uses
      comobj;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      oXL,oWB,oSheet:Variant;
    begin
      // start Excel and get Application object
      oXL:=CreateOleObject('Excel.Application');
      oXL.Visible:=true;  // get a new workbook
      oWB:=oXL.Workbooks.Add;
      oSheet:=oWB.ActiveSheet;  // add table headers going cell by cell
       oSheet.Cells[1,2]:='销售小组1';
        oSheet.Cells[1,3]:='销售小组2';
        oSheet.Cells[2,1]:='商品1';
        oSheet.Cells[2,2]:='10';
        oSheet.Cells[2,3]:='20';
        oSheet.Cells[3,1]:='商品2';
        oSheet.Cells[3,2]:='20';
        oSheet.Cells[3,3]:='15';    oSheet.Cells[5,1]:='合计';
        //下面的两行可能是你所要的
        oSheet.Cells[5,2].Formula:='=SUM(B2:B3)';
        oSheet.Cells[5,3].Formula:='=SUM(C2:C3)';end;end.
    你的问题用我上面的代码完全可以解决。为了简单起见,我在用SUM函数时直接指定了范围,你也可以根据程序的要求动态来改变和拓展这个范围。
    希望能解决你的问题!如果有疑问可以给我来信:[email protected]
      

  7.   

    to deldelmeme979(急?急也没用):
    没办法,那个提示框还是要出来。
    上述代码不知你有没有试过循环调用,如果循环调用的话,我想可能要出问题。
    不过还是要谢谢你。
    星期一结帐。
      

  8.   

    to zjj_horse:
    上面的代码我在D6和Excel2000中运行是通过的,还没试过循环调用,也没见到你说的那个提示框。
    我不太明白你说的循环调用是什么意思,我猜你是要把类似的代码放在循环里面吧。如果是那样,有可能会产生单元格对自己的引用的问题,Excel会提示出错的。也许你把思路再说清楚一些我能帮你看看。
      

  9.   

    To deldelmeme979(急?急也没用) :
    我的Excel里面有好几个sheet,每个sheet里面都有合计,所以我说的循环调用是指在对每个sheet进行合计的时候就调用这段代码。现在我已经用sql语句解决了这个问题。即先合计再导出,不在Excel里面进行计算。不过如果老兄你有时间倒可以看看代码怎么改进可以避免出现这样的对话框。