Development/Delphi
TDataSet(TQuery, TTable) 엑셀로 저장하기
코드의추억
2015. 7. 9. 03:03
// 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;