Q&A

  • 스트링그리드를 엑셀 변환시 중복 변환 오류


항상 이곳에서 많은 도움을 받으면서 프로그램을 짜고있는 사람입니다.

예) 스트링 그리드의 내용을 엑셀로 변환하려고 합니다. 그런데 자료는 변환되는데,

왜 스트링 그리드의 내용이 엑셀에서는 일부 자료가 복사가 되면서 중복으로 변환됩니다.

(위에서 보시는 것과 같이 오류가 발생고있습니다.)

코드 오류인지 확인하려고 몇 시간 동안 보고있는데, 잘 풀리지를 않고 있습니다. 고수님들

한번 봐주시고, 도움 주셨으면 감사하겠습니다......


<!--CodeS-->
function fnStringGridToExcel(StringGrid1: TStringGrid) : Boolean;
var
XL, XArr: Variant;
i, j: Integer;
XLastPosion: String;
Sp : Integer;
begin
//데이타 처리변수
XArr := VarArrayCreate([1, StringGrid1.ColCount], VarVariant);

try
   //엑셀을 실행
   XL := CreateOLEObject('Excel.Application');
except
   MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
   Exit;
end;

XL.WorkBooks.Add; //새로운 페이지 생성

i := 0;
j := 0;

for i := i to StringGrid1.RowCount-1 do begin
   for j := i to StringGrid1.ColCount-1 do begin
     XArr[j + 1] := StringGrid1.Cells[j, i];
   end;


   Sp := StringGrid1.ColCount Div 26;

   if Sp <> 0 then
     XLastPosion := CHR(64 + Sp) + CHR(64 + StringGrid1.ColCount Mod 26)
   else
     XLastPosion := CHR(64 + StringGrid1.ColCount);

     //엑셀에 값을 넣는다.
     XL.Range['A' + IntToStr(i + 3), XLastPosion + IntToStr(i + 3)].Value := XArr;

    end;

     //셀 크기 조정
XL.Range['A1', XLastPosion + IntToStr(i + j)].Select;
XL.Selection.Columns.AutoFit;
XL.Range['A1', 'A1'].Select;
XL.Visible := True;
Result := True;
end;
<!--CodeE-->
2  COMMENTS
  • Profile
    홍성락 2007.02.16 01:09
    //hsr
    아래 소스에서요
    for i := i to StringGrid1.RowCount-1 do begin
       for j := i to StringGrid1.ColCount-1 do begin
    에서 루프 변수와 시작 변수를 일부러 하신건지요?
    통상 서로 영향을 주지 않을경우는 분리합니다.
    여기선 i,j 대신 0이 맞을듯 합니다.
    for i := 0 to StringGrid1.RowCount-1 do begin
       for j := 0 to StringGrid1.ColCount-1 do begin
    결과가 대칭적으로 중복이나 배열변수에 대칭중복이 되는듯합니다
    ///////////////////////////////////////////////////////////////////////////////////////////////


  • Profile
    박종학 2007.02.17 06:53
    .