Q&A

  • DBGrid 내용을 Excel로 보내기
DBGrid에서 엑셀 화일로 내보내기 까지는
구현을 했습니다.
그런데 이게 3000건 이상 되면
컴이 다운됩니다.
3000건 이하로 엑셀로 내보낸후
다시 또 내보내려고 하려고 해도 다운됩니다.
시스템이 떨어져서 그런 같다고 생각하지만
다운안되게 하는 방법이 있을꺼라고
생각되서 고수님들에 조언 부탁드립니다.
부탁드립니다.!!
2  COMMENTS
  • Profile
    홍성락 2002.02.22 20:00

    //////////////////////////////////////////////////////////
    쿼리나 테이블로 읽어왔다면 아래처럼해보세요.
    유닛에 comobj 선언하구요
    아래함수인자중
    1은 디비그리드
    2는 연결된 테이블인데요, TQuery를 사용하셨으면 형만 바꾸시면 됩니다
    3은 생성된 페이지 이름으로 아무거나 쓰시면됩니다


    procedure TForm1.f_DBGridToExcel(tdb :TDBGrid; Tb: TTable; fName : string);
    Var
      si, sj: integer;
      XL, XLBook: Variant;
    begin
       try
         XL := GetActiveOLEObject('Excel.Application');
       except
         on E: EOleSysError do begin
           try
             XL := CreateOLEObject('Excel.Application');          //엑셀을 실행
           except
             MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
             XL.free;
             Exit;
           end;
         end;
       end;
       try
         XLBook := XL.WorkBooks.Add; //새로운 페이지 생성
         XLBook.WorkSheets[1].Name := fName;
         XL.Visible := True;

         Tb.DisableControls;
         Tb.First;
         For si := 0 To Tb.RecordCount-1 Do Begin
             Application.ProcessMessages;
             For sj := 1 To tdb.FieldCount Do Begin
                 XL.Cells[si+1,sj].Value := Tb.Fields[sj-1].AsString;
                 XL.Cells[si+1,sj].Style.NumberFormatLocal := '@' ;//문자열로 인식하게 하게함
             End;
             Tb.Next;
         End;
         XLBook.WorkSheets[fName].Range['A1', 'A1'].Select;
         XL.Selection.Columns.AutoFit;
         Tb.EnableControls;
       finally
         XLBook := UnAssigned;
         XL := UnAssigned;
       end;
    end;
  • Profile
    원혁상 2002.02.23 18:37
    감사 ^.^
    아직 델파이 허접이라서.......
    일단 제가 코딩한 거와 홍성락님께서 코딩한
    소스를 비교해봤더니
    XL := UnAssigned;
    이게 빠져 있던데
    그것때문에 그런것 같아요
    정말 감사 합니다.