답변이 없어서 다시 올립니다.. Query결과를 Excel전환시 Error 발생하는 군요... 어떠한 Error 냐구요? "CreateOLEObject('Excel.Application');" 에서 EOlesys Error With Message "Colnitialize를 호출 하지 않았습니다." 라는 Error M...
류성호
•
1999.07.12 19:57
Fox 께서 말씀하시기를...
> 답변이 없어서 다시 올립니다..
> Query결과를 Excel전환시 Error 발생하는 ...
> 답변이 없어서 다시 올립니다..
> Query결과를 Excel전환시 Error 발생하는 군요...
>
> 어떠한 Error 냐구요?
> "CreateOLEObject('Excel.Application');" 에서
> EOlesys Error With Message "Colnitialize를 호출 하지 않았습니다."
> 라는 Error Message가 발생 한답니다.
>
> 여러 고수님들의 조언 바랍니다.
> 무덥지만 좋은 하루 되세요.....
제가 사용한 예제를 올리겠습니다.
TQuery에서 Open된 상태에 버튼을 눌렀을 때
레코드의 처음부터(DBModule.Query3.First)
레코드의 마지막까지(DBModule.Query3.EOF) 데이터를
하나씩 Excel에 넣는 소스입니다.
그리고 반드시 Uses절 ComObj라고 써주어야 합니다.
사이트 소개 http://cafe.hanmail.net/delphi
procedure TMDIChild.BitBtn1Click(Sender: TObject);
var
XL, XArr, XTitle: Variant;
i, j, k: Integer;
begin
//타이틀 처리변수
XTitle := VarArrayCreate([1, DBModule.Query3.FieldCount], VarVariant);
//데이타 처리변수
XArr := VarArrayCreate([1, DBModule.Query3.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 <= DBModule.Query3.FieldCount do begin
XTitle[i] := DBModule.Query3.Fields[i-1].FieldName;
Inc(i);
end;
//타이틀처리
XL.Range['A1', CHR(64 + DBModule.Query3.FieldCount) + '1'].Value := XTitle;
DBModule.Query3.First;
while Not DBModule.Query3.EOF do begin
j := 1;
while j <= DBModule.Query3.FieldCount do begin
if DBModule.Query3.Fields[j-1].DataType = ftString then
XArr[j] := '''' + DBModule.Query3.Fields[j-1].Value
else XArr[j] := DBModule.Query3.Fields[j-1].Value;
Inc(j);
end;
//셀에 값을 넣는다.
XL.Range['A' + IntToStr(k+1), CHR(64 + DBModule.Query3.FieldCount) + IntToStr(k+1)].Value := XArr;
DBModule.Query3.Next;
Inc(k);
end;
//셀 크기 조정
XL.Range['A1', CHR(64 + DBModule.Query3.FieldCount) + IntToStr(k)].Select;
XL.Selection.Columns.AutoFit;
XL.Range['A1', 'A1'].Select;
end;