Q&A

  • 엑셀관련 질문입니다.
스트링그리드의 자료를 엑셀파일로 만들기 위해서..

아래와 같은 소스를 이곳에서 얻었습니다.



전 깔끔하게 엑셀파일이 딱 만들어지기를 원했지만..

이 소스는

엑셀이 열리는것이 보이고 또한 셀에 데이터가 박혀 들어가는것이

보이더군요..



음.. 제가 원하는 방식.. 그러니깐..

깔끔하게 파일만 덜렁 만들어 주려면 어떻게 하지요?



그러니깐.. 편법이라도..



========================== 아 래 =================================



procedure StringGridToExcel_GRD(var vSGGrid: TStringGrid; Title: string);

var

XL, XLBook: Variant;

i, j, k: Longint;

si, sj: integer;

begin

with vSGGrid do begin

try

XL := GetActiveOLEObject('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;

XL.Visible := True;

i := 1; si := 0;

k := 1; sj := 0;

for si := 0 to colCount - 1 do begin

if si = 0 then

XLBook.WorkSheets[Title].Range['A1'].Value := Cells[si,0]

else if si = 1 then

XLBook.WorkSheets[Title].Range['B1'].Value := Cells[si,0]

else if si = 2 then

XLBook.WorkSheets[Title].Range['C1'].Value := Cells[si,0]

else

XLBook.WorkSheets[Title].Range['D1'].Value := Cells[si,0];

end;

for si := 0 to colCount - 1 do begin

for sj := 1 to RowCount - 1 do begin

if si = 0 then

XLBook.WorkSheets[Title].Range['A'+IntToStr(sj+1)].Value := Cells[si,sj]

else if si = 1 then

XLBook.WorkSheets[Title].Range['B'+IntToStr(sj+1)].Value := Cells[si,sj]

else if si = 2 then

XLBook.WorkSheets[Title].Range['C'+IntToStr(sj+1)].Value := Cells[si,sj]

else

XLBook.WorkSheets[Title].Range['D'+IntToStr(sj+1)].Value := Cells[si,sj];

end;

end;

XLBook.WorkSheets[Title].Range['A1', 'A1'].Select;

XL.Selection.Columns.AutoFit;

finally

XLBook := UnAssigned;

XL := UnAssigned;

end;

end;

end;



0  COMMENTS