2012-10-16 1 views
0

EPPlus를 사용하여 스프레드 시트를 연 다음 그림과 정보로 채 웁니다. 스프레드 시트를 채우는 데 사용한 사진이 모두 포함 된 폴더를 삭제하려고하면이 파일이 다른 응용 프로그램에서 사용 중임을 알게됩니다. 사용 된 객체를 해제하고 스프레드 시트를 닫는 올바른 방법은 무엇입니까?개체를 해제하고 스프레드 시트를 닫는 데 문제가 있습니까?

using (var package = new ExcelPackage(existingFile)) 
    { 
     ExcelWorkbook workBook = package.Workbook; 
     if (workBook != null) 
     { 
      if (workBook.Worksheets.Count > 0) 
      { 
       int i = 0; 
       foreach(ExcelWorksheet worksheet in workBook.Worksheets) 
       { 
       xlWorkSeet1[i] = worksheet; 
       i = i + 1; 
       } 

      } 
     } 

      //More code ... 

      FileStream aFile = new FileStream(tempFolderPathAlt + saveas + ".xls", FileMode.Create); 
      byte[] byData = package.GetAsByteArray(); 
      aFile.Seek(0, SeekOrigin.Begin); 
      aFile.Write(byData, 0, byData.Length); 
      aFile.Close(); 

      xlWorkSeet1 = null; 
      workBook = null; 


     }//End using 

    String P = Path.Combine(tempFolderPathAlt, "ExtractedFiles"); 
    bool directoryExists = Directory.Exists(P); 
    if (directoryExists) 
    Directory.Delete(P, true); // deletes sub-directories 

오류는 내가 내 스프레드 시트에 추가 한 사진을 삭제하려고 할 때 발생합니다.

enter image description here

+0

, 왜 당신은'xls' 파일 경우에 기록 할 수 있습니다 여부를 알려 주시기 바랍니다 Epplus'xlsx' 파일에 쓰기? 어쩌면'xls' 파일은 여전히 ​​이미지 파일을 사용합니다 ('aFile.Close()'를 호출 할지라도). –

+0

@TimSchmelter 죄송합니다. xlsx 일 때 xls로 저장 중이라는 것을 알지 못했습니다. iv가이를 변경했지만 문제가되지 않았습니다. 나는 패키지 또는 워크 북을 닫을 필요가 있다고 생각한다. 나는 패키지를 사용하여 workBook = null로 만들지 만 트릭을 수행하지는 않습니다. – Pomster

+0

그럼 코드를 전혀 이해할 수 없습니다. 일반적으로 파일을 'ExcelPackage'의 생성자에 전달합니다. 'existingFile'을 전달하고 있지만 다른 'FileStream'을 사용하여 바이트를 쓰고 있습니까? 나는 간단하게'package.Save();'를 사용할 것이다. –

답변

0

다음 밖으로 시도하고 날이 내가 완전히 코드를 이해하지 않는다는 것을 인정해야

int writeTimeout = 200; 
using (var aFile = new FileStream(tempFolderPathAlt + saveas + ".xls", FileMode.Create)) 
{ 
     aFile.WriteTimeout = writeTimeout; 
     byte[] byData = package.GetAsByteArray();    
     aFile.Seek(0, SeekOrigin.Begin);    
     aFile.Write(byData, 0, byData.Length);    
     xlWorkSeet1 = null;    
     workBook = null; 
     Thread.Sleep(writeTimeout); 
} 
+0

다음 오류가 발생했습니다.이 스트림에서는 제한 시간이 지원되지 않습니다. 이것은 코드 줄에 나타납니다 : aFile.WriteTimeout = writeTimeout; – Pomster

관련 문제