Q&A

  • dbgrid 에서 excel로 전환
다음과 같은 변환 프로시져를 사용했는데요....

테이블에 따라.... 오류가 발생할때가 있고... 잘될때가 있더라구요....

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;
end.

에러가 날때는...

Variants unit 이 열리구... 아래 부분에 걸리네요...
.
.
.

procedure VarInvalidOp;
begin
  raise EVariantInvalidOpError.Create(SInvalidVarOp);
end;

.
.
.


에러메세지는 다음과 같구요...

'Invalid variant operation' 입니다.....

이유가 멀가요?
2  COMMENTS
  • Profile
    나옹이 2002.08.17 07:13
    제가 브레이크 포인트로 잡아서 보니깐...

    공백을 받으면.... 에러가 나는거 같아요........

    빈 필드의 값을 넘길때.....  이거 봐도...넘 어렵네요...


  • Profile
    나옹이 2002.08.17 07:56
      while Not EOF do begin
            j := 1;
            while j <= FieldCount do begin
               if Fields[j-1].DataType = ftString then
                    if Fields[j-1].value = null then          <--여기
                    XArr[j] := '''' + ''                            <--여기
                    else                                              <--여기 추가했어요.
                    XArr[j] := '''' + Fields[j-1].Value
               else
                    XArr[j] := Fields[j-1].Value;
               Inc(j);
            end;
    • 이정한
    • 2002.08.17 22:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2002.08.18 00:09
      0 : frmSmon.Edit1.Text := frmSmon.Edit1.Text +IntToHex(rxBuf[rxcnt],2) + ' ';   1 : frmS...
    • 델델델
    • 2002.08.17 21:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2002.08.18 00:15
      파일 처리와 파일 스트림의 차이를 굳이 말씀드리자면, 스트림 글자 차이겠지요. 같이 파일을 처리하는 ...
    • 이희성
    • 2002.08.17 21:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2002.08.17 21:33
      냉무라고 했는데 보는사람은 뭐지..  ㅡㅡ^ 쩝.....
    • 황준동
      2002.08.18 00:34
      DBGrid1.DefaultDrawing := False; OnDrawColumnCell 이벤트에서 그려 주시면 됩니다. 예를 들면 ...
    • 강미경
    • 2002.08.17 20:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 문재욱
      2002.08.17 20:47
      원하는 답변이 맞는지 모르겠네요.. 메모컴포넌트에 읽어들였다면 커서가 메모 텍스트의 끝부분에서 커...
    • 심청이
    • 2002.08.17 19:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2002.08.18 00:36
      어떤 프로그램이고, 어떻게 코딩되어 있는지는 잘 모르겠지만. 제 생각으로는 델파이를 새로 깔고 패치를 ...
    • 심청이
      2002.08.18 02:58
      관심 감사드립니다. 이제야 방향을 잡은 것 같습니다. 프로그램에서 자체적으로 제작한 DLL을 호출하...
    • 나옹이
    • 2002.08.17 19:01
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김용구
      2002.08.18 01:05
      TQuery  컴포넌트를 사용해서 불러 온거면 RequestLive := True 로 설정 해주시고요 DBGrid ...
    • 나옹이
      2002.08.18 02:08
      table로 할때는 다른가요?
    • 맑은물
      2002.08.18 07:28
      table 로 하시면 기본 디폴트 값으로도 수정이 되던데요. 일단 테스트로 table 컴포넌트를 배치하고 네비...
    • 나옹이
      2002.08.19 06:58
      냅...그건 알고 있는데요.... table1.tabelname:='aaa'; 라고 지정하면.... 걍 데이터가 나오면서......
    • 황준동
      2002.08.18 00:46
      화면은 보통 72DIP 정도 됩니다. 하지만 프린터 같은 경우엔 600DIP이니 뭐니해서 상당히 크죠. 따라서 화...
    • 나옹이
    • 2002.08.17 07:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 나옹이
      2002.08.17 07:13
      제가 브레이크 포인트로 잡아서 보니깐... 공백을 받으면.... 에러가 나는거 같아요........ 빈 필드...
    • 나옹이
      2002.08.17 07:56
        while Not EOF do begin         j := 1;  &...
    • 김요한
    • 2002.08.17 05:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.08.17 18:33
      안녕하세요. 최용일입니다. 하나의 파일만 있든 여러개의 파일들이 있든 한번에 하나씩만 전송합니다. ...
    • 이정택
    • 2002.08.17 04:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 하늘벌레
      2002.08.21 00:38
      질문내용으로 보아 마스터/디테일로 구현하시는것도 좋을듯하네요 일일이 쿼리 안던져도 되니까요 ^^;
    • 이창환
      2002.08.17 05:39
      DBGrid.DataSource.DataSet.RecordCount를 이용하거나.. 자료건수가 0인것을 체크하는 거라면 RecordCount...
    • 갈매기
      2002.08.17 05:04
      query1.recordcount = 0 then showmessage('데이타가 없습니다'); 이렇게 하면 안될까요? 허접 초...
    • 나옹이
    • 2002.08.17 04:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 양용성
      2002.08.17 13:09
      보아하니 오라클 같은데 먼저 SYS.ALL_TAB_COLUMNS - 테이블에서 정보를 가져옵니다. SYS.ALL_CONSTRAI...
    • 나옹이
      2002.08.17 17:09
      냅...... 전체 스키마를 만들어주는 구문은 없었군요... 테이블 정보를 보고서 조합해서 만들어야 한...
    • 동규재
    • 2002.08.17 03:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      2002.08.21 18:36
      우선 windows 프로그램에서 Unix 상의 Command 를 실행시킬수 있는 방법은 두가지 정도로 나누어집니다. ...
    • 황원규
    • 2002.08.17 03:11
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김헌대
      2002.08.17 22:08
      이렇게 사용하면 어때여.. 이 procedure는 입력문자나 숫자을 에디터 창에서 정렬시켜주는 겁니다. 델파...
    • 갈매기
      2002.08.17 05:08
      숫자만 입력하신다면 numEdit를 사용하시는게 어떨지요~~
    • 황원규
      2002.08.17 17:49
      답변 감사합니다. 근데,  numEdit에 대해서 잘 모르겠네요. 첨 보는 거라, Help를 찾아봐도 ...
    • ^ㅡ^
      2002.08.17 18:51
      //numEdit란 하나의 컴포넌트입니다. 델파이에서 제공해주는것이 아니고 사용자가 만든 컴퍼런트입니...
    • 황준동
      2002.08.18 00:38
      Delphi 강의실에 맨 앞쪽에 보면 이것에 대한 강좌가 있습니다. 그걸 참조하시면 될것 같네요.
    • 2002.08.17 02:49
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이창환
      2002.08.17 05:29
      설정 : Edit의 Name속성을 Edit0 ~ Edit30이라고 가정한 후 var     TmpComp : TC...
    • 고지범
      2002.08.17 02:03
      일단 폼위에 작업을 편하게 하기 위해서 TEdit 가 순서대로 있다고 가정 하겠습니다. 테스트를 편하게 하...
    • 김요한
      2002.08.18 01:04
      제가 질문하고 제가 답을 하네요. 혹시 여러분들 중에서 메일에 대한 테스트를 하실때는 hotmail과 같...