// DataSet 을 엑셀로 내보내기
procedure TfrmMain.exportToExcel(DataSet: TDataSet);
var
XL, XArr, XTitle: Variant;
i, j, k: Integer;
FixedCol: String;
begin
try
//타이틀 처리변수
XTitle := VarArrayCreate([1, DataSet.FieldCount], VarVariant);
//데이타 처리변수
XArr := VarArrayCreate([1, DataSet.FieldCount], VarVariant);
try
//엑셀을 실행
XL := CreateOLEObject('Excel.Application');
except
MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
Exit;
end;
XL.WorkBooks.Add; //새로운 페이지 생성
XL.Visible := True;
i := 1;
k := 1;
while i <= DataSet.FieldCount do begin
XTitle[i] := DataSet.Fields[i-1].DisplayName;
Inc(i);
end;
//타이틀처리
// 엑셀 Range['top&left', 'bottom&right'] 형식, 사각형 그린다 : 좌상단, 우하단
if DataSet.FieldCount > 26 then
FixedCol := CHR(64 + DataSet.FieldCount div 26)+CHR(64 + DataSet.FieldCount mod 26)
else FixedCol := CHR(64 + DataSet.FieldCount);
XL.Range['A1', FixedCol + '1'].Value := XTitle;
DataSet.First;
while Not DataSet.EOF do
begin
j := 1;
while j <= DataSet.FieldCount do begin
XArr[j] := DataSet.Fields[j-1].DisplayText;
Inc(j);
end;
//셀에 값을 넣는다.
XL.Range['A' + IntToStr(k+1), FixedCol + IntToStr(k+1)].Value := XArr;
DataSet.Next;
Inc(k);
end;
//셀 크기 조정
XL.Range['A1', FixedCol + IntToStr(k)].Select;
XL.Selection.Columns.AutoFit;
except
on E: Exception do
begin
FDQExam.Close;
MessageDlg ('엑셀저장 오류 입니다.'+#13+E.Message, mtError, [mbOk], 0);
end;
end;
end;
// 엑셀저장 버튼 클릭
procedure TfrmMain.BtnExportExcelClick(Sender: TObject);
var
locate: Integer;
begin
FDQExam.DisableControls;
locate := FDQExam.FieldByName('IDX').AsInteger;
try
exportToExcel(FDQExam);
finally
FDQExam.Locate('IDX',VarArrayOf([locate]),[loCaseInsensitive]);
FDQExam.EnableControls;
end;
end;