Q&A

  • Excel에서 cell의 배경칼라 정하는법
안녕하십니까? 델 고수님들..

StringGrid에서 Excel로 옮기는 작업을 하고 있는데..



옮기면서 Excel에다 어느정도 완성된 폼으로 만들고 싶습니다.

uses Comobj; 의 CreateOleObject('Excel.Application')을 이용해서 만드는데..

font, 테두리선의 굵기를 정해주는 소스는 있는데..



배경색채우는 소스를 도저히 못찾겠습니다.

아시는 분 도와주시면 정말 감사하겠습니다.



그럼..

1  COMMENTS
  • Profile
    바사기몬 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;