Q&A

  • excel생성한 파일 지우기..
쿼리를 해서 엑셀을 add해서  그냥 cells에다 뿌려주니깐
너무 느리더라구요.
그래서 fileStream을 사용해서 이용했는데 하나 안되는게 있어서
이렇게 질문을 합니다.
TFileStream.Create하면 엑셀파일을 만들잖아요..
이걸 가지고 다시 보고서에 맞게 편집을 하게되었는데.
엑셀파일을 닫을때 저장 하지않고 나오면 그래도 fileStream으로 생성한
파일은 남아 있잖아요..
결국은 파일을 못지우게 되네요..
어떻게 하면 엑셀파일에 따라서 보고서 폴더에 있는 엑셀파일을 지우든지
저장하든지 할수 있을까요..
아무리 생각해도 나지 않네요..



FStream := TFileStream.Create('C:dims보고서'+sDate+'.xls', fmCreate);
   try
   XlsBeginStream(FStream, 0);
   with SelectQuery do begin
       Close;
       Sql.Clear;
       Sql.Add('select event_rdtype, event_inv_id, subst_name, event_type, event_level,');
       Sql.Add('event_port, code_name, event_state, event_occurdate,event_normal, event_stoptime');
       Sql.Add('from event_history eh, setup_zone_tbl szt, code_tbl ct ');
       Sql.Add('where eh.event_zonecd = szt.zone_cd and');
       Sql.Add('eh.event_setupzone = szt.subst_cd and eh.event_dest = ct.small_cd');
       Sql.Add('order by event_occursysdate desc');
       Open;
       first;
       itmp := 0;
       while not EOF do begin

              if FieldByName('event_level').AsString = '1' then
                 XlsWriteCellLabel(FStream,  1,iTmp, 'CR');
               if FieldByName('event_level').AsString = '2' then
                 XlsWriteCellLabel(FStream,  1,iTmp, 'MJ');
               if FieldByName('event_level').AsString = '3' then
                 XlsWriteCellLabel(FStream,  1,iTmp, 'MN');
               if FieldByName('event_level').AsString = '4' then
                 XlsWriteCellLabel(FStream,  1,iTmp, 'WR');
               if FieldByName('event_level').AsString = '5' then
                 XlsWriteCellLabel(FStream,  1,iTmp, 'NM');
               Case FieldByName('event_rdType').AsInteger of
                 1: XlsWriteCellLabel(FStream,  0,iTmp, 'RTU');
                 2: XlsWriteCellLabel(FStream,  0,iTmp, 'DVR');
                 3: XlsWriteCellLabel(FStream,  0,iTmp, '정류기');
                 4: XlsWriteCellLabel(FStream,  0,iTmp, 'UPS');
                 5: XlsWriteCellLabel(FStream,  0,iTmp, '냉방기');
               end;

                 XlsWriteCellLabel(FStream,  2,iTmp, FieldByName('Subst_Name').AsString);
                 XlsWriteCellLabel(FStream,  3,iTmp, FieldByName('event_inv_id').AsString);
                 XlsWriteCellLabel(FStream,  4,iTmp, FieldByName('cfChannel').AsString);

                 XlsWriteCellLabel(FStream,  5,iTmp, FieldByName('code_name').AsString);
                 XlsWriteCellLabel(FStream,  6,iTmp, FieldByName('event_state').AsString);
                 XlsWriteCellLabel(FStream,  7,iTmp, FieldByName('event_Normal').AsString);
                 XlsWriteCellLabel(FStream,  8,iTmp, FieldByName('EVENT_OCCURDATE').AsString);
                 XlsWriteCellLabel(FStream,  9,iTmp, FieldByName('EVENT_STOPTIME').AsString);

                 Inc(iTmp);
                 Next;
       end;
   end;
   XlsEndStream(FStream);
   finally
   FStream.Free;
   end;

     XLApp := CreateOleObject('Excel.Application');
     //XLApp.WorkBooks.add;

     XLApp.WorkBooks.Open('C:dims보고서'+sDate+'.xls');
     XLApp.range['a1:J'+intTostr(iTmp)].select;
     XLApp.Selection.cut;
     XLApp.Range['a6'].Select;
     XLApp.ActiveSheet.Paste;
     XLApp.range['a2:I3'].select;
   XLApp.Selection.Merge;
   XLApp.Range['A:J'].Font.Name := '굴림체';
   XLApp.Range['A2:J3'].Font.Bold := True;
   XLApp.Range['A:J'].Font.Size := 9;
   XLApp.Range['A2:J3'].Font.Size := 16;
   XLApp.Range['A:J'].VerticalAlignment := xlVAlignCenter;
   XLApp.Range['A:J'].HorizontalAlignment := xlVAlignCenter;
   //xl.Range['A2:K3'].Font.Underline := TRUE;
   XLApp.Cells[2,1] := '전체 장애 이력';

   XLApp.Cells[5,1] := '장비';
   XLApp.Cells[5,2] := '등급';
   XLApp.Cells[5,3] := '설치위치';
   XLApp.Cells[5,4] := '장비ID';
   XLApp.Cells[5,5] := 'PORT';
   XLApp.Cells[5,6] := '대상';
   XLApp.Cells[5,7] := '현재값';
   XLApp.Cells[5,8] := '기준값';
   XLApp.Cells[5,9] := '장애발생시간';
   XLApp.Cells[5,10] := '장애처리시간';
   //XLApp.range['a5:I5'].RowHeight:= 20;
   XLApp.Range['a5:J5'].interior.Color := RGB(192,192,192);
   XLApp.Range['a5:J5'].Borders.Item[xlBottom].LineStyle := xlSolid;
   XLApp.Range['a5:J5'].Borders.Item[xlLeft].LineStyle := xlSolid;
   XLApp.Range['a5:J5'].Borders.Item[xlRight].LineStyle := xlSolid;
   XLApp.Range['a5:J5'].Borders.Item[xlTop].LineStyle := xlSolid;
   XLApp.visible := TRUE;

  
1  COMMENTS
  • Profile
    이호성 2002.07.11 23:43
    제가 파일을 open 해서 그런것 같아요
    파일을 add해주면되네요 add해준다음에
    if  FileExists('C:dims보고서'+sDate+'.xls') then
          DeleteFile('C:dims보고서'+sDate+'.xls');
    이걸 넣어주면 깨끗하게 지워지네요..
    제가 add함수와 open함수를 잘 이해하지 못했네요
    add는 새로운 엑셀파일을 만드는거고.
    open함수를 기존의 파일을 여는거라 열려있을때 아무리
    지우려고 해도 지워지지 않는거네요..
    다른 분도 이런 간단한 실수를 안했으면 합니다..그럼 수거..