안녕하십니까? 델 고수님들.. StringGrid에서 Excel로 옮기는 작업을 하고 있는데.. 옮기면서 Excel에다 어느정도 완성된 폼으로 만들고 싶습니다. uses Comobj; 의 CreateOleObject('Excel.Application')을 이용해서 만드는데.. font, 테...
바사기몬
•
2000.08.31 04:59
아래의 엑셀 처리 하는 것은 저두 이곳에서 그 원본을 가져 갔었읍니다..
그리고 일부를 수정 하여 사용하...
그리고 일부를 수정 하여 사용하고 있습니다.
요약하면 ....
XL.Range[ XL.Cells[1, 1], XL.Cells[sgHead.RowCount, FieldCount]].Select;
XL.Selection.Interior.ColorIndex := xlColorGray; // 15
XL.Selection.Interior.Pattern := xlSolid; // 1
위와 같습니다...
상수값은 엑셀의 VBA...흐음.. 매크로를 기록하시면 그 스크립트를
얻을 수 있는데요.. 그걸 찾아서 원하시는 칼라를 지정 하시면 될겁니다..
개인적으론 속도가 너무 느려 선이나 색은 잘 사용 하지 않아
상수를 다 정의해 놓고 사용하지 않았습니다..
이해가 잘 안되실것 같아 제가 사용하는 함수를 그대로 올렸습니다...
일부 이해 되지 않는 부분이 있더라도 원하시는 부분은 이해 하는데
지장을 없으실것 같아 이만 줄입니다..
그럼 이만..
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function : ExcelSimpleConv
기능설명 : 엑셀 처리
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
function fExcelSimpleConv(sSheetName:string;
var sgHead:TStringGrid; txsTemp: TTuxedoService):boolean;
var XL, XArr, XTitle: Variant;
ic, ir , j, k: Integer;
const xlColorGray = 15; //Color Gray
xlSolid = 1; //Pattern
begin
result := True;
with txsTemp do begin
XTitle := VarArrayCreate([1, sgHead.ColCount], VarVariant); //title 처리변수
XArr := VarArrayCreate([1, FieldCount], VarVariant); //data 처리변수
try
XL := CreateOLEObject('Excel.Application'); //엑셀
except
Application.MessageBox('Excel이 설치되어 있지 않습니다.',
'정보', MB_ICONINFORMATION);
result := False;
Exit;
end;
try
XL.WorkBooks.Add; //페이지 생성
XL.ActiveSheet.Name := sSheetName;
k := 0;
with sgHead do begin //title처리
for ir := 0 to RowCount-1 do begin
for ic := 0 to ColCount-1 do XTitle[ic+1] := Cells[ic, ir];
XL.Range[ XL.Cells[(ir+1), 1],
XL.Cells[(ir+1), ColCount]].Value := XTitle;
inc(k);
end;
end; // end of with
// Data 작업
First;
DisableControls;
while Not EOF do begin
for j:=0 to FieldCount-1 do
if Fields[j].DataType = ftString then
XArr[j+1] := '''' + Fields[j].Value
else XArr[j+1] := Fields[j].Value;
XL.Range[ XL.Cells[(k+1), 1],
XL.Cells[(k+1), FieldCount]].Value := XArr;
Next;
Inc(k);
end; // end of while
for j:=0 to FieldCount-1 do begin
if (Fields[j].DataType = ftString)or //string type이거나 납입자번호이면
(Fields[j].FieldName = 'ACCTNO') then begin
XL.Columns[j+1].Select;
XL.Selection.NumberFormatLocal := '@';
end
else begin
XL.Columns[j+1].Select;
XL.Selection.NumberFormatLocal := '#,##0_ ;[빨강]-#,##0 ';
end;
end;
//셀 크기 조정
XL.Range[ XL.Cells[1, 1], XL.Cells[k, FieldCount]].Select;
XL.Selection.Columns.AutoFit;
//Header color
XL.Range[ XL.Cells[1, 1], XL.Cells[sgHead.RowCount, FieldCount]].Select;
XL.Selection.Interior.ColorIndex := xlColorGray;
XL.Selection.Interior.Pattern := xlSolid;
if copy(sSheetName,1,26) = '서비스별납부방법별청구현황' then
XL.Range[ XL.Cells[k+1, 2], XL.Cells[k+1, FieldCount]] .FormulaR1C1 :=
'=SUM(R[-34]C:R[-1]C)';
First;
EnableControls;
XL.ActiveSheet.Range['A1'].Select;
XL.Visible := True;
XL:=unassigned;
except
Application.MessageBox('Excel처리중 오류가 발생 했습니다. ',
'오류', MB_ICONERROR);
result := False;
XL:=unassigned;
Exit;
end;
end;
end;