Q&A

  • 엑셀 출력에 관한 질문입니다.
아래와 같이 고수님들이 주신 소스로 엑셀을 출력하고 있습니다.

adoquery와 datasource와  dbgrid를 연결해서 사용하고 있는데,

사원번호라는 필드에는 00011 이라는 값이 들어있는데,

엑셀에서 11 만 표시되거든요.

이것에 대해서 조언을 구합니다.

procedure ExcelConv(AQuery: TQuery);
var
  XL, XArr, XTitle: Variant;
  i, j, k: Integer;
begin
  with AQuery do begin
     //타이틀 처리변수
     XTitle := VarArrayCreate([1, FieldCount], VarVariant);
     //데이타 처리변수
     XArr := VarArrayCreate([1, FieldCount], VarVariant);

     try
        //엑셀을 실행
        XL := CreateOLEObject('Excel.Application');
     except
        MessageDlg('Excel이 설치되어 있지 않습니다.',
                    MtWarning, [mbok], 0);
        Exit;
     end;

     XL.WorkBooks.Add; //새로운 페이지 생성
     XL.Visible := True;
     i := 1;
     k := 1;

     while i <= FieldCount do begin
        XTitle[i] := Fields[i-1].FieldName;
        Inc(i);
     end;
     //타이틀처리
     XL.Range['A1', CHR(64 + FieldCount) + '1'].Value := XTitle;

     First;
     while Not EOF do begin
        j := 1;
        while j <= FieldCount do begin
           if Fields[j-1].DataType = ftString then
                XArr[j] := '''' + Fields[j-1].Value
           else                                    
                XArr[j] := Fields[j-1].Value;
           Inc(j);
        end;
        //셀에 값을 넣는다.
        XL.Range['A' + IntToStr(k+1),
           CHR(64 + FieldCount) + IntToStr(k+1)].Value := XArr;
        Next;
        Inc(k);
     end;

     //셀 크기 조정
     XL.Range['A1', CHR(64 + FieldCount) + IntToStr(k)].Select;
     XL.Selection.Columns.AutoFit;
     XL.Range['A1', 'A1'].Select;
     First;
  end;
end;
2  COMMENTS