可以用变量 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;
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;
解决方案 »
- 按僵哥的话说,成为猩猩了,散分
- pack[0] := char($03) 这条语句的意思!!!急
- delphi2005,2006这两个版本。哪个好些?up有分。
- 导出EXCEL问题,急啊在线等!
- 为什么在程序界面上点击右键,CPU占用率会达到100%,并且点击次数越多, CPU达到100%的时间
- 如何让程序的窗体显示在桌面的中央(除任务栏)。
- 向各位同行请教
- 一个菜问题
- 在adoquery中sql内能否写二个:delete from aa delete from bb,该如何写.
- 帮忙啊,急急急!怎么知道update or delete 处理了几条纪录
- DCOM服务器的CallBack的技术怎样实现?
- 高分请教关于G.723系列的问题--分数可以另给
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)+')';
?如属意外,请单击“确定”按钮。系统将显示“循环引用”工具栏,帮助您改正公式。
?有关循环引用及改正的详细内容,请单击“帮助”按钮。
?如果不作改动,请单击“取消”按钮。导出完成后,我查看导出的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分。
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]
没办法,那个提示框还是要出来。
上述代码不知你有没有试过循环调用,如果循环调用的话,我想可能要出问题。
不过还是要谢谢你。
星期一结帐。
上面的代码我在D6和Excel2000中运行是通过的,还没试过循环调用,也没见到你说的那个提示框。
我不太明白你说的循环调用是什么意思,我猜你是要把类似的代码放在循环里面吧。如果是那样,有可能会产生单元格对自己的引用的问题,Excel会提示出错的。也许你把思路再说清楚一些我能帮你看看。
我的Excel里面有好几个sheet,每个sheet里面都有合计,所以我说的循环调用是指在对每个sheet进行合计的时候就调用这段代码。现在我已经用sql语句解决了这个问题。即先合计再导出,不在Excel里面进行计算。不过如果老兄你有时间倒可以看看代码怎么改进可以避免出现这样的对话框。