항상 이곳에서 많은 도움을 받으면서 프로그램을 짜고있는 사람입니다.
예) 스트링 그리드의 내용을 엑셀로 변환하려고 합니다. 그런데 자료는 변환되는데,
왜 스트링 그리드의 내용이 엑셀에서는 일부 자료가 복사가 되면서 중복으로 변환됩니다.
(위에서 보시는 것과 같이 오류가 발생고있습니다.)
코드 오류인지 확인하려고 몇 시간 동안 보고있는데, 잘 풀리지를 않고 있습니다. 고수님들
한번 봐주시고, 도움 주셨으면 감사하겠습니다......
<!--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-->
아래 소스에서요
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
결과가 대칭적으로 중복이나 배열변수에 대칭중복이 되는듯합니다
///////////////////////////////////////////////////////////////////////////////////////////////