Q&A

  • DB와 엑셀
델파이에서 오라클 데이타를 읽습니다.

그 데이타를 엑셀로 옮겨야 하거든요.

방법을 알려 주세요.

서버 컴포넌트를 사용하려고 했는데

DBGrid에 일단 데이타를 출력한 후에 그 데이타를 엑셀로 옮기려고 했더니 데이터가 맨 윗 줄만 오고 있습니다. 방법을 알려 주세요.

더 좋은 방법이 있으면 그것을 알려 주세요.

테이블을 연결하면 될 것 같은데 쉽지가 않네요.

1  COMMENTS
  • Profile
    coolling 2000.11.01 06:29
    좋은 밤입니다..

    근데 서버 컴포넌트가 뭔가요..??

    저도 이제 막 델을 시작하는 관계로 모른게 많습니다만....

    어쩨든....엑셀로 데이터를 옮기는데는 query와 table 모두 가능합니다..

    제 경험상...저같은 경우에는 여기 저기서 소스를 가져다 붙여 함수를 만들어 놓고

    사용합니다....

    소스는 다음과 같구요...unit만을 하나 만들어서 사용하시면, 편해요..

    아래 소스는 Query를 엑셀로 옮기는 거구요... TQuery파라메터 대신에 TTable을 사용하면, table도 가능하겠죠..

    제사한 설명은 검색을 잘해보시면, 찾을 수 있을겁니다..저도 검색을 통해서

    배운 거니까요..

    그럼 즐푸하세요..



    ==================================================================================

    Function Query_To_Excel( Var Qry_Name : TQuery ; Sheet_Name , File_Name : String ; Column_Title : TStringList ):Integer;

    // 특정 데이타를 EXCEL로 보낸다

    Var

    WinHandle : Thandle;

    XLApp , Sheet , ColumnRange: Variant;

    nCount , nCont ,FieldCnt , j , i , k , SheetCnt : Integer;

    s_Excel_Data : String;

    s_Ascii : String;

    begin

    If Qry_Name.Active = False Then Begin

    Application.MessageBox ( '연결된 데이타가 없습니다.' , '확인' , MB_OK ) ;

    Result := 0;

    Exit;

    End;



    Try

    XLApp := CreateOLEObject ( 'Excel.Application') ;

    Except

    Application.MessageBox ( '엑셀을 열 수 없습니다' + chr(13) +

    '엑셀이 설치되어있는지 확인하십시요' , '알림' , MB_OK ) ;

    Result := 0;

    Exit;

    End; //try 문의 끝

    XLApp.Visible := False;

    // XLApp.Visible := True ;





    Try

    // SetForegroundWindow( WinHandle );

    XLApp.WorkBooks.Add ; //엑셀에 workbook을 1개 추가한다.



    //저장할때 저장 여부 확인

    XLApp.DisplayAlerts := False;



    Qry_name.DisableControls ;

    sheetcnt := XLApp.workbooks.count ;

    XLApp.Workbooks[sheetcnt].WorkSheets[1].Name := sheet_name ;

    Sheet := XLApp.WorkBooks[sheetcnt].WorkSheets[sheet_name] ;

    ColumnRange := XLApp.Workbooks[sheetcnt].WorkSheets[sheet_name].Columns ;



    For i := 1 To Qry_Name.FieldCount do Begin

    ColumnRange.Columns[i].Style.NumberFormatLocal := '@' ;

    // 이부분이 문자열로 인식하게 하는 부분입니다.

    End ;//for문의 끝



    Fieldcnt := 0 ;



    //Column Title 출력

    For j := 0 to Column_Title.Count -1 Do Begin

    Fieldcnt := j + 1;

    Sheet.Cells[2, FieldCnt] := Column_Title.Strings[j] ;

    End;



    Qry_name.first ;

    nCount := 4 ;



    // 실제 데이타 출력

    While Not( Qry_name.Eof ) Do Begin

    For i := 0 To Qry_Name.Fields.Count - 1 Do Begin

    nCont := i + 1 ;

    If (Qry_name.Fields[i].Value = NULL) Then Begin

    s_Excel_Data := '';

    End Else Begin

    s_Excel_Data := Qry_name.fields[i].Value ;

    End;

    Sheet.Cells[nCount , nCont] := (s_excel_data);

    End ;

    Qry_Name.Next ;

    Inc(nCount) ;

    End ;

    Qry_Name.EnableControls ;

    Qry_name.first ;

    Except

    Application.MessageBox ( '서버와의 연결에 실패했거나 데이타베이스와의 연결문제가 발생했습니다' ,'확인' ,MB_OK ) ;

    Result := 0;

    Exit ;

    End ;



    For k := 1 to (qry_name.FieldCount) Do Begin

    s_Ascii := Chr(k + 64) ;

    ColumnRange.Columns[s_Ascii+':'+s_Ascii].EntireColumn.AutoFit ;

    End;



    XLApp.ActiveWorkBook.SaveAs(File_Name);

    If not VarIsEmpty(XLApp) Then Begin

    XLApp.Quit;

    End;



    Result := 1;

    End;

    ==================================================================================



    초보 wrote:

    > 델파이에서 오라클 데이타를 읽습니다.

    > 그 데이타를 엑셀로 옮겨야 하거든요.

    > 방법을 알려 주세요.

    > 서버 컴포넌트를 사용하려고 했는데

    > DBGrid에 일단 데이타를 출력한 후에 그 데이타를 엑셀로 옮기려고 했더니 데이터가 맨 윗 줄만 오고 있습니다. 방법을 알려 주세요.

    > 더 좋은 방법이 있으면 그것을 알려 주세요.

    > 테이블을 연결하면 될 것 같은데 쉽지가 않네요.같은데 쉽지가 않네요.