delphi如何取到循环的次数
在进行excel表格导入的时候使用了循环,但是循环的次数是不确定的,我想得到循环的次数,好来判断我下一次循环的开始行,不知道怎么能得到这个次数呢!大家帮帮我!谢谢啦!...
在进行excel表格导入的时候使用了循环,但是循环的次数是不确定的,我想得到循环的次数,好来判断我下一次循环的开始行,不知道怎么能得到这个次数呢!大家帮帮我!谢谢啦!
展开
3个回答
展开全部
自己加个计数器不行吗?
在循环开头定一个变量,count :=0 ,在循环中间count := count + 1,循环结束后count就是下一次循环开始的行
在循环开头定一个变量,count :=0 ,在循环中间count := count + 1,循环结束后count就是下一次循环开始的行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-11-02
展开全部
procedure TfrmBaseSet.ToExcel(FormName: string; DBG: TDBGridEh; IdenHad: Boolean);
//*************************以下全部是定义***************************//
var
i: integer;
Col , row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
FileName: string;
procedure incColRow; //增加行列号
begin
if Col = DBG.DataSource.DataSet.FieldCount - 1 then
begin
Inc(Row);
Col :=0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);//写字符串数据
var
L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf (arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);//写整数
var
V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double );//写浮点数
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
//*************************以上全部是定义***************************//
begin
if (DBG.DataSource.DataSet.Active = False) or (DBG.DataSource.DataSet.RecordCount = 0) then
exit;
dlgSave_Main.FileName:=Copy(ExtractFilePath(ParamStr(0)),1,3)+FormName+FormatDateTime('yyyy-mm-dd',Now());
FileName:='Error';
dlgSave_Main.Filter:='Excel2003|*.xls';
if dlgSave_Main.Execute then
begin
FileName:= dlgSave_Main.FileName+'.xls';
aFileStream := TFileStream.Create(FileName, fmCreate);//写文件头
end;
if FileName='Error' then Exit;
Try
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));//写列头
Col := 0;
Row := 0;
for i := 0 to DBG.Columns.Count-1 do
WriteStringCell(DBG.Columns[i].Title.Caption);
if IdenHad then
WriteStringCell(' ');
DBG.DataSource.DataSet.DisableControls;
ABookMark := DBG.DataSource.DataSet.GetBookmark;
DBG.DataSource.DataSet.First ;
while not DBG.DataSource.DataSet.Eof do//写数据集中的数据
begin
for i := 0 to DBG.Columns.Count-1 do
begin
if Col>DBG.Columns.Count-1 then
begin
Row :=Row+1;
Col :=0;
end;
case DBG.Columns[i].Field.DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes : WriteIntegerCell(DBG.Columns[i].Field.AsInteger);
ftFloat, ftCurrency, ftBCD : WriteFloatCell(DBG.Columns[i].Field.AsFloat)
else
WriteStringCell(DBG.Columns[i].Field.AsString);
end;
end;
DBG.DataSource.DataSet.Next;
Application.ProcessMessages;
end;
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));//写文件尾
if DBG.DataSource.DataSet.BookmarkValid(ABookMark) then
DBG.DataSource.DataSet.GotoBookmark(ABookMark);
frmBase.ShowInfoBox(ToExcel_LangList[3]);
AFileStream.Free;
DBG.DataSource.DataSet.EnableControls;
ToExcel_LangList.Free;
except
exit;
end;
end;
就像这个导出 Excel代码一样应该有个Row变量
//*************************以下全部是定义***************************//
var
i: integer;
Col , row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
FileName: string;
procedure incColRow; //增加行列号
begin
if Col = DBG.DataSource.DataSet.FieldCount - 1 then
begin
Inc(Row);
Col :=0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);//写字符串数据
var
L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf (arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);//写整数
var
V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double );//写浮点数
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
//*************************以上全部是定义***************************//
begin
if (DBG.DataSource.DataSet.Active = False) or (DBG.DataSource.DataSet.RecordCount = 0) then
exit;
dlgSave_Main.FileName:=Copy(ExtractFilePath(ParamStr(0)),1,3)+FormName+FormatDateTime('yyyy-mm-dd',Now());
FileName:='Error';
dlgSave_Main.Filter:='Excel2003|*.xls';
if dlgSave_Main.Execute then
begin
FileName:= dlgSave_Main.FileName+'.xls';
aFileStream := TFileStream.Create(FileName, fmCreate);//写文件头
end;
if FileName='Error' then Exit;
Try
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));//写列头
Col := 0;
Row := 0;
for i := 0 to DBG.Columns.Count-1 do
WriteStringCell(DBG.Columns[i].Title.Caption);
if IdenHad then
WriteStringCell(' ');
DBG.DataSource.DataSet.DisableControls;
ABookMark := DBG.DataSource.DataSet.GetBookmark;
DBG.DataSource.DataSet.First ;
while not DBG.DataSource.DataSet.Eof do//写数据集中的数据
begin
for i := 0 to DBG.Columns.Count-1 do
begin
if Col>DBG.Columns.Count-1 then
begin
Row :=Row+1;
Col :=0;
end;
case DBG.Columns[i].Field.DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes : WriteIntegerCell(DBG.Columns[i].Field.AsInteger);
ftFloat, ftCurrency, ftBCD : WriteFloatCell(DBG.Columns[i].Field.AsFloat)
else
WriteStringCell(DBG.Columns[i].Field.AsString);
end;
end;
DBG.DataSource.DataSet.Next;
Application.ProcessMessages;
end;
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));//写文件尾
if DBG.DataSource.DataSet.BookmarkValid(ABookMark) then
DBG.DataSource.DataSet.GotoBookmark(ABookMark);
frmBase.ShowInfoBox(ToExcel_LangList[3]);
AFileStream.Free;
DBG.DataSource.DataSet.EnableControls;
ToExcel_LangList.Free;
except
exit;
end;
end;
就像这个导出 Excel代码一样应该有个Row变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义一个变量i,integer类型,每次循环i加1就知道了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询