저는 이렇게 코딩을 했는데, 실행은 되지만 저장되지 않습니다.
고수님들의 도움이 필요합니다.
Not DataSource.DataSet.Eof 부분에서 for 루프가 끝나면 그 밑에 배열로
저장되어야 되는데 디버깅한 결과 바로 Not DataSource.DataSet.Eof 부분을
검사합니다..
그리고 마지막 부분에 '저장 후 바로 열기' 부분도 안됩니다. 아마 저장 자체가
안되어서 열기가 안되는 듯합니다.
델파이에서 아직 갈 길이 먼듯합니다. 도와 주십시요.
procedure TExcelOptionDialog.bbtnExecClick(Sender: TObject);
var
XL, XArr, XTitle: Variant;
i, j, k, v_count: Integer;
begin
if sdDialog.Execute then
begin
v_count := FdxGrid.DataSource.DataSet.FieldCount;
with FdxGrid do begin
//타이틀 처리변수
XTitle := VarArrayCreate([1, v_count ], VarVariant);
//데이타 처리변수
XArr := VarArrayCreate([1, v_count ], VarVariant);
try
//엑셀을 실행
XL := CreateOLEObject('NExcel.Application');
except
MessageDlg('Excel이 설치되어 있지 않습니다.',
MtWarning, [mbok], 0);
Exit;
end;
XL.WorkBooks.Add; //새로운 페이지 생성
// XL.Visible := True;
i := 1;
k := 1;
while i < v_count do begin
XTitle[i] := Columns[i-1].ClassName;
Inc(i);
end;
//타이틀처리
XL.Range['A1', CHR(64 + v_count ) + '1'].Value := XTitle;
//SelectNext;
// Next;
while Not DataSource.DataSet.Eof do begin <-이부분
for j:=1 to v_count do
if j = 12 then break
else if Columns[j-1].Field.DataType = ftString then
if Columns [j-1].Field.Value = null then
XArr[j] := '''' + ''
else
XArr[j] := '''' + Columns[j-1].Field.Value
else
XArr[j] := Columns[j-1].Field.Value
end; <-끝나면 밑에 값을 넣어야 하는데
다시 윗부분을 while부분 검사
//셀에 값을 넣는다.
XL.Range['A' + IntToStr(k+1),
CHR(64 + v_count) + IntToStr(k+1)].Value := XArr;
Next;
Inc(k);
//셀 크기 조정
XL.Range['A1', CHR(64 + v_count) + IntToStr(k)].Select;
// XL.Selection.Columns.AutoFit;
XL.Range['A1', 'A1'].Select;
SelectFirst;
end;
if rgOptions.ItemIndex = 1 then // 저장후 실행옵션이면
ShellExecute(0, 'OPEN', PChar(sdDialog.FileName), <-이부분
nil, nil, SW_SHOW); // Excel 열기
end;
Close;
end;