아래소스는 쿼리를 읽어서 Excel로 내리는 소스입니다.
필드가 약 70여개 되는데 쿼리 Open시 값이 있으면 필드Visible = True 이고
없으면 False 입니다.
문제는 Visible 이 False인 필드가 Excel 에 빈 란으로 생성 됩니다.
아래 소스에는 False인것은 나타내지 안도록 했는데 말을 안듣네요...
이것을 어떻게 하면 되겠습니까?
with SQL5021 do begin
ProgressBar1.max := recordcount;
ProgressBar1.Position := 0;
DisableControls;
//티이틀 기록
for i := 1 to FieldCount - 1 do begin
if Fields[i].Visible = true then begin
Fworksheet.Cells[3, i].value := Fields[i].DisplayLabel;
end else
begin
//필드Visible = False 인것은 나타내지 않는다...----> 안되네...
end;
end;
k := 4; //Excel행 증가변수
First;
while not Eof do begin
ProgressBar1.Position := ProgressBar1.Position + sizeof(1);
for i := 1 to FieldCount -1 do begin
if Fields[i].Visible = true then begin
if Fields[i].Tag = 0 then //0은 Text, 1은 Integer
Fworksheet.Cells[k, i].value := SQL5021.Fields[i].Asstring else
Fworksheet.Cells[k, i].value := floattostr(SQL5021.Fields[i].AsFloat);
end else
begin
//필드Visible = False 인것은 나타내지 않는다...----> 안되네...
end;
end;
Inc(k);
Next;
end;
EnableControls;
end;
코딩이 조금 잘못된것 같네요...
Fworksheet.Cells[3, i].value := Fields[i].DisplayLabel;
이부분에서 i의 값에 따라서 셀의 값을 넣어주니깐...
visible이 아닌 값은 처리를 안하더라도 다름 셀에 넣어주게 되지 않겠습니까?
셀의 행번호를 다른 변수를 써서 사용하시면 되겠네요...
k := 0;
for i := 1 to FieldCount - 1 do begin
if Fields[i].Visible = true then
begin
inc(k); <-- 요렇게 하시면 아마 될것 같네요. 그럼.
Fworksheet.Cells[3, k].value := Fields[i].DisplayLabel;
end else
begin
//필드Visible = False 인것은 나타내지 않는다...----> 안되네...
end;
end;
그럼 즐거운시간 되세요.
하얀까마귀