DBGrid에서 엑셀 화일로 내보내기 까지는
구현을 했습니다.
그런데 이게 3000건 이상 되면
컴이 다운됩니다.
3000건 이하로 엑셀로 내보낸후
다시 또 내보내려고 하려고 해도 다운됩니다.
시스템이 떨어져서 그런 같다고 생각하지만
다운안되게 하는 방법이 있을꺼라고
생각되서 고수님들에 조언 부탁드립니다.
부탁드립니다.!!
//////////////////////////////////////////////////////////
쿼리나 테이블로 읽어왔다면 아래처럼해보세요.
유닛에 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;
//////////////////////////////////////////////////////////
쿼리나 테이블로 읽어왔다면 아래처럼해보세요.
유닛에 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;