StringGrid에 만건정도의 데이타가 있는데
엑셀로 받으려고 하니 앞의 방법으로는 시간이 너무 오래걸립니다.
(앞의방법 : row * col을 for문을 돌면서 엑셀로 올림)
그래서 배열을 이용해 한 Row씩 저장하여 엑셀로 변환시키는 방법(아래처럼)을 썼더니
1분정도 걸리더군요.
좀더 빠른 방법이 있을 것 같은데 좀처럼 찾을 수 없어서 문의드립니다.
혹시 아시면 답변 주시면 감사하겠습니다.
==================================================================
(아래)
procedure TmainForm.print_adj_data;
Var
XL, XLBook, XArr : Variant;
title : string;
si, sj : integer;
vv_sTemp: string;
const
vv_scol : array [0..25] of PChar = ('A','B','C','D','E','F','G',
'H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U',
'V','W','X','Y','Z');
FieldCount : Integer = 18;
begin
title := 'title 명';
XArr := VarArrayCreate([1, FieldCount] , VarVariant); //data 처리변수
with devStrgrid1 do begin
try
XL := CreateOLEObject('Excel.Application'); //엑셀을 실행
except
on E: EOleSysError do begin
try
XL := CreateOLEObject('Excel.Application'); //엑셀을 실행
except
MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
Exit;
end;
end;
end;
try
XLBook := XL.WorkBooks.Add; //새로운 페이지 생성
XLBook.WorkSheets[1].Name := Title;
si := 0;
sj := 0;
for sj := 0 to RowCount - 1 do begin
for si := 0 to colCount - 1 do begin
vv_sTemp := vv_sCol[si]+IntToStr(sj+1);
XArr[si+1] := Cells[si,sj];
end;
XL.Range[ XL.Cells[(sj+1), 1],
XL.Cells[(sj+1), si]].Value := XArr;
end;
XL.Visible := True;
XLBook.WorkSheets[Title].Range['A1', 'A1'].Select;
XL.Selection.Columns.AutoFit;
finally
XLBook := UnAssigned;
XL := UnAssigned;
end;
end;
end;
스트링그리드의 COMMATEXT속성을 이용하여 임시파일에 먼저 저장한다음
엑셀을 시작할때 이 파일을 같이 열어주면 될것 같네요.