Q&A

  • Query결과를 Excel전환
답변이 없어서 다시 올립니다..

Query결과를 Excel전환시 Error 발생하는 군요...



어떠한 Error 냐구요?

"CreateOLEObject('Excel.Application');" 에서

EOlesys Error With Message "Colnitialize를 호출 하지 않았습니다."

라는 Error Message가 발생 한답니다.



여러 고수님들의 조언 바랍니다.

무덥지만 좋은 하루 되세요.....

1  COMMENTS
  • Profile
    류성호 1999.07.12 19:57
    Fox 께서 말씀하시기를...

    > 답변이 없어서 다시 올립니다..

    > 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;