Q&A

  • DBGrid의 내용을 엑셀자료로 변환시 에러가 발생해요?
// 처음 Users에 Comobj추가 했음.
// 에러사항 : 'OLE error 800A03EC'
// 다른 방법이 없는지 알려주세용~~ 부탁드려여 ^^

procedure TFPA_7201.btnExcelClick(Sender: TObject);
Var
Loop1I, Li_Field1, Li_Field2, Li_Cnt1, Li_Cnt2, Li_Cnt3 : Integer;
XArr1, XArr2, Sheet : Variant;

begin

  XArr1 := VarArrayCreate([1, QryDefault.FieldCount], VarVariant);
//   XArr2 := VarArrayCreate([1000, 14], VarVariant);

  Try
     Excel := CreateOLEObject('Excel.Application');
  Except
     ShowMessage('엑셀이 설치되어있지 않습니다.');
     Exit;
  End;

  If (TabSheet1.Visible) And (QryDefault.IsEmpty) Then
  Begin
     ShowMessage('엑셀로 변환할 자료가 없습니다.');
     Exit;
  End;

  If (TabSheet2.Visible) And (QryDefault2.IsEmpty) Then
  Begin
     ShowMessage('엑셀로 변환할 자료가 없습니다.');
     Exit;
  End;

  Excel.WorkBooks.Add;
  Excel.visible := true;
  Excel.Cells.Select;
  Excel.Cells.EntireColumn.Font.Name := '돋움체';
  Excel.Range['B1:E1'].Select;
  Excel.ActiveCell.Font.Size      := 16;
  Excel.ActiveCell.Font.Name      := '돋움체';
  Excel.ActiveCell.Font.FontStyle := '굵게';
  Excel.ActiveCell.FormulaR1C1 := '가입자리스트';

  Li_Cnt1 := 0;

  // Note - 설치매출/수신료매출
  If TabSheet1.Visible Then
  Begin
     For Li_Field1 := 0 To 17 Do
     Begin
        If DbGrid1.Columns[Li_Field1].Visible Then
        Begin
           Excel.Range[Chr(65+Li_Cnt1) + '3', Chr(65+Li_Cnt1) + '3'].Value := DbGrid1.Columns.Items[Li_Field1].Title.Caption;
           Li_Cnt1 := Li_Cnt1 + 1;
        End;
     End;

     Li_Cnt2 := 0;
     QryDefault.First;
     QryDefault.DisableControls;

     While Not QryDefault.Eof Do
     Begin
        Li_Cnt2 := 0;
        For Li_Field1 := 0 To QryDefault.FieldCount Do
        Begin
           If DbGrid1.Columns[Li_Field1].Visible Then
           Begin
              XArr1[Li_Cnt2+1] := QryDefault.Fields[Li_Cnt2].Value;

// Note - 에러가 발생하는 부분
              Excel.Range['A4', Chr(64+QryDefault.FieldCount) + Chr(Li_Cnt3 + 4)].Value := '''' + QryDefault.Fields[Li_Cnt2].Value;

//               Excel.Cells[Li_Cnt3+4, Li_Cnt2+1] := QryDefault.Fields[Li_Cnt2].Value;

//               Excel.Cells[Li_Cnt3+4, Li_Cnt2+1].Style.NumberFormatLocal := '@';
4)].Value := '''' + QryDefault.Fields[Li_Cnt2].Value;
              Inc(Li_Cnt2);
           End;
        End;
        QryDefault.Next;
        Inc(Li_Cnt3);
     End;
  End
  Else
  Li_Cnt1 := 1;

  // Note - 해약/입금
  Begin
     For Li_Field1 := 0 To 14 Do
     Begin
        If DbGrid2.Columns[Li_Field1].Visible Then
        Begin
           Excel.Range[Chr(64+Li_Cnt1) + '3', Chr(64+Li_Cnt1) + '3'].Value := DbGrid2.Columns.Items[Li_Field1].Title.Caption;
           Li_Cnt1 := Li_Cnt1 + 1;
        End;
     End;
  End;

qryDefault.First;
qryDefault.EnableControls;

Excel.Cells.Select;
Excel.Cells.EntireColumn.AutoFit;
Excel.Range['A1'].Select;
2  COMMENTS
  • Profile
    열심히 2002.07.27 03:38
    저도 전에 엑셀 변환 독학하다가 짜증나 죽는줄 알았음다..ㅡ,.ㅡ;;

    제가 생각하기에는 값을 넘겨주는 형태가 잘못된것 같네염...

    A4부터 유동인값 까지 값을 넘겨주시려면 그에 맞는 길이의 배열이 있어야 합니다..

    배열의 형태로 넘겨줘야한다는 얘기지요..

    맞는지는 모르겠지만.. 만약에 밑의 문장에서

    Chr(64+QryDefault.FieldCount) + Chr(Li_Cnt3 + 4) <- 이곳에 들오는 값이

    'A4'가 아니라면 에러가 날것 같거든요..

    한행에 값을 넣어주시는게 목적이라면 for문에서 배열에집어넣어주시고요
    (앗 배열 있넹..ㅡㅡ;)

    for문(fieldcount)이 끝난후에 행에다가 넣어주시지요. 답이 됐음 하네요..

    즐델하세요~~


    Excel.Range['A4', Chr(64+QryDefault.FieldCount) + Chr(Li_Cnt3 + 4)].Value := '''' + QryDefault.Fields[Li_Cnt2].Value;

  • Profile
    깨구락지 2002.07.26 23:09
    비슷한 방법이기는 하지만 참고하십시오. 제가 현재 쓰고 있는것입니다.

    • 김해균
    • 2002.07.27 00:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.07.27 00:54
      안녕하세요. 최용일입니다. 메세지 날리세요...   PostMessage(Form1.Handle, WM_CLOSE, 0...
    • ^ㅡ^
    • 2002.07.27 00:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.07.27 00:46
      ActiveFTP라는 것도 델파이로 맹글었는데... 김영대씨라고 요즘은 한델에서 볼수가 없지만... 이것고 막강...
    • 유영권
    • 2002.07.26 23:51
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.07.27 00:08
      var //  TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);   FS : TFon...
    • 유영권
      2002.07.27 00:13
      채팅창에서...font값을 설정한걸.. 정보를 전달하는데 string,값을 전달하기 때문에.. string값이 필요...
    • Falco
      2002.07.27 02:23
      function FontStylesToString(const FontStyles: TFontStyles): String; begin   Result := ''...
    • 이호성
    • 2002.07.26 23:32
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 마당쇠
    • 2002.07.26 23:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.07.26 23:44
      unit Unit1; interface uses   Windows, Messages, SysUtils, Classes, Graphics, Contro...
    • 최용일
      2002.07.27 00:35
      안녕하세요. 최용일입니다. 밑에 보시면 예제 있습니다. ^^ 항상 즐코하세요...
    • 나옹이
      2002.07.27 19:28
      ^^* 봤습니다.... 감사합니다....
    • 이희용
    • 2002.07.26 22:54
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 머슴
      2002.07.26 23:28
      이렇게 하시면 될것 같습니다.. 그리드(스트링 그리드)로 하실경우는   for문으로 돌려서 ...
    • 김한나
    • 2002.07.26 21:42
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김한나
      2002.08.05 19:05
      정말 정말 감사합니당 ^^*
    • 성더기
      2002.07.26 22:21
      혹쉬 탭키때문이라면... TabStop 을 False로 해보세요..
    • KDDG_ZZOM
      2002.07.26 21:57
      Panel위에 올려놓구 Panel을 False시키는 편법이 있는데...^^ 꼭 Panel은 아니고요 자식을 가질수 있는 콤...
    • 우제은
    • 2002.07.26 21:16
    • 2 COMMENTS
    • /
    • 1 LIKES
    • 열심히
      2002.07.27 03:38
      저도 전에 엑셀 변환 독학하다가 짜증나 죽는줄 알았음다..ㅡ,.ㅡ;; 제가 생각하기에는 값을 넘겨주는 ...
    • 깨구락지
      2002.07.26 23:09
      비슷한 방법이기는 하지만 참고하십시오. 제가 현재 쓰고 있는것입니다.
    • 코난
    • 2002.07.26 21:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.07.27 03:58
      제가 생각하기에는 컴퍼넌트 문제인것 같은데염... 컴퍼넌트파일이 손상 됐거나..아님 없거나,, 있는데....
    • 성더기
      2002.07.26 22:07
      여러가지 경우가 있을수 있는데요.. 자세한건 모르겠지만... 일단 프린터 드라이버를 설치해보세요.. 기...
    • 궁금이
    • 2002.07.26 20:11
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 짱아
    • 2002.07.26 20:07
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2002.07.26 22:09
    • 짱아
      2002.07.26 22:35
    • 성더기
      2002.07.26 23:59
    • 짱아
      2002.07.27 02:54
      다른거 지정해주는건 없나여???? 음... 에러가 뜨는뎅...... QuickRep1 과  QuickRep2를 한...
    • 성더기
      2002.07.27 03:37
      퀵리포트를 Create하셨는지요.. available폼 이라면 리포트를 먼저 생성하셔야함다
    • 나옹이
    • 2002.07.26 19:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 짱아
    • 2002.07.26 18:58
    • 3 COMMENTS
    • /
    • 0 LIKES
    • ^ㅡ^
      2002.07.26 19:57
      위에 있는님이 한것처럼 하셔도 될꺼 같구요 with Query1 do 전 주로 이렇게 작업합니다 with Query...
    • 짱아
      2002.07.26 20:09
      님들 감사.. 해결 했떠염....        sql.Add('   where gu l...
    • KDDG_ZZOM
      2002.07.26 19:15
      조건절에 보면 %을 붙이는데... 원하는기능이 LIKE기능아닌가요? LIKE기능을 원하면 sql.Add(' &nbs...
    • 최용일
      2002.07.27 01:03
      안녕하세요. 최용일입니다. 패키지의 Requires절에 있는 vcl50을 델파이 Lib폴더에 있는 vcl60으로 바꾸...
    • 이덕영
      2002.07.30 20:31
      ..
    • 성더기
      2002.07.26 22:11
      불가능한듯.. 툴버튼은 포커스를 가질 수 없습니다 플렛컴포넌트나 또는 포커스를 가질수 있는 버튼컴포...
    • 최용일
      2002.07.26 23:10
      안녕하세요. 최용일입니다. CopyRect를 이용해보세요... var     SourceRect, ...
    • 나다
    • 2002.07.26 07:12
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김초보
    • 2002.07.26 06:10
    • 0 COMMENTS
    • /
    • 0 LIKES