Q&A

  • 엑셀 종료시 리소스 반환???

안녕하세요?? 또 엑셀에서 헤매고 있습니다..ㅠ.ㅠ

우여곡절 끝에 엑셀 화일들을 생성했으나..

리소스가 부족하여..진행이 안 된다는...ㅠ.ㅠ

쉬트 12개를 만들어야 하는데요..

대강 흐름은 데이타 읽어 와서 엑셀 열고

쉬트 선택후 작업하고 저장하고

QUIT로 빠지고..12번 반복이거든요..

근데 한 번 실행될 때마다 리소스를 먹더니..

85%에서 시작한 것이 8-9번 작업시 0%라는 에러가..ㅠ.ㅠ

아래는 엑셀에 쓰는 한 부분입니다..

혹시 아시는 분은 꼭 좀..ㅠ.ㅠ

아참 차일드폼에서 엑셀을 생성합니다..

메인폼 죽여야 리소스가 반환되더군요..ㅠ.ㅠ

다음은 소스입니다...^^:;;;

procedure Tfrm_5802.MakeXLFile ;
Var
  XL  : Variant;
  i   : Integer;
  j   : Integer;
  k   : Integer;
  SrData : TsearchRec;
  X_file  : olevariant;

begin

  IF NOT DirectoryExists('C:tempAsReport') THEN ForceDirectories ('C:tempAsReport');//디렉토리 지정

  X_file := 'C:tempAsReport'+'NH-'+ Trim(Med_StYYMM.text) + '.xls';

  //화일 존재시 화일 삭제
  IF FindFirst(X_file, faArchive, SrData) = 0 THEN DeleteFile(X_file) ;

  try
    XL := CreateOLEObject('Excel.Application');
  except
    showmessage('Excel이 설치되어 있지 않습니다!!!');
    exit;
  end;

    XL.WorkBooks.Add; //엑셀 워크북 추가
    XL.Visible := True;

    XL.Sheets['Sheet2'].Select ;
    XL.Sheets['Sheet2'].Name := '02' ;

    XL.Sheets['Sheet3'].Select ;
    XL.Sheets['Sheet3'].Name := '03' ;

    XL.Sheets['Sheet1'].Select ;
    XL.Sheets['Sheet1'].Name := '01'  ;


    FOR i := 4 To 12 DO
    BEGIN
      XL.Sheets.Add;
      XL.Sheets['Sheet' + IntToStr(i)].Select ;

      IF i < 10 THEN
         XL.Sheets['Sheet' + IntToStr(i)].Name := '0' + IntToStr(i)
      ELSE XL.Sheets['Sheet' + IntToStr(i)].Name := IntToStr(i) ;

    END; //For

    //시트 정렬

    For j := 1 To XL.Sheets.Count DO BEGIN
      For k := 1 To (j - 1) DO BEGIN

        IF (UpperCase(XL.Sheets[j].Name) < UpperCase(XL.Sheets[k].Name)) THEN
        BEGIN
          XL.Sheets[J].Move(XL.Sheets[K])  ;
        END;//IF

      END;//For k
    END;//for j

    //------- 데이터 INPUT --------------//
    
    //-------데이터 INPUT END-------------//
// ----- 엑셀 편집
    XL.Columns['A:I'].Select;
    XL.Selection.ColumnWidth := 8.11 ;
    XL.Selection.Font.Name := '돋움';
    XL.Selection.Font.Size := 12 ;

    
    XL.Sheets['01'].Name := '표지'  ;

    XL.ActiveWindow.Zoom := 75;

    XL.ActiveSheet.PageSetup.LeftMargin  := 80 ;  // /28
    XL.ActiveSheet.PageSetup.RightMargin := 80 ;

    XL.ActiveSheet.PageSetup.Orientation := 2; // 1= 세로 2 = 가로

    XL.DisplayAlerts := false;
    XL.activeworkbook.SaveAs(X_file);

    XL.Quit ;
    
0  COMMENTS