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
오류는 내가 내 스프레드 시트에 추가 한 사진을 삭제하려고 할 때 발생합니다.
, 왜 당신은'xls' 파일 경우에 기록 할 수 있습니다 여부를 알려 주시기 바랍니다 Epplus'xlsx' 파일에 쓰기? 어쩌면'xls' 파일은 여전히 이미지 파일을 사용합니다 ('aFile.Close()'를 호출 할지라도). –
@TimSchmelter 죄송합니다. xlsx 일 때 xls로 저장 중이라는 것을 알지 못했습니다. iv가이를 변경했지만 문제가되지 않았습니다. 나는 패키지 또는 워크 북을 닫을 필요가 있다고 생각한다. 나는 패키지를 사용하여 workBook = null로 만들지 만 트릭을 수행하지는 않습니다. – Pomster
그럼 코드를 전혀 이해할 수 없습니다. 일반적으로 파일을 'ExcelPackage'의 생성자에 전달합니다. 'existingFile'을 전달하고 있지만 다른 'FileStream'을 사용하여 바이트를 쓰고 있습니까? 나는 간단하게'package.Save();'를 사용할 것이다. –