2014-11-12 3 views
0

Я открываю файл epplus excel.epplus dispose не работает

После прочтения некоторых данных, я хотел бы, чтобы закрыть пакет:

pck.Stream.Close() 
pck.Dispose() 

Unfortunatelly файл первенствует по-прежнему заблокирован. Мне нужно закрыть все приложение, чтобы разблокировать файл excel.

У меня есть googled, но не нашел ничего полезного, кроме вышеперечисленного.

+0

Ваша логика происходит в 'using' блок? – IronMan84

+0

Я не использовал его с использованием, но теперь я помещаю его в блок использования -> та же проблема – derstauner

ответ

1

Как вы открываете файл? Следующее создает, сохраняет, открывает, распечатывает и, наконец, удаляет все проблемы с одним и тем же потоком без проблем. Я даже могу установить точку останова в любом месте и удалить файл. Чтение файла этот путь не должен заблокировать файл, так как он втягивается в память:

[TestMethod] 
public void OpenReopenPrintDeleteTest() 
{ 
    //Create some data 
    var existingFile = new FileInfo(@"c:\temp\temp.xlsx"); 
    if (existingFile.Exists) 
     existingFile.Delete(); 

    using (var package = new ExcelPackage(existingFile)) 
    { 
     var workbook = package.Workbook; 
     workbook.Worksheets.Add("newsheet"); 
     package.Save(); 
    } 

    using (var package = new ExcelPackage(existingFile)) 
    { 
     var workbook = package.Workbook; 
     var worksheet = workbook.Worksheets.First(); 

     //The data 
     worksheet.Cells["A1"].Value = "Col1"; 
     worksheet.Cells["A2"].Value = "sdf"; 
     worksheet.Cells["A3"].Value = "ghgh"; 
     worksheet.Cells["B1"].Value = "Col2"; 
     worksheet.Cells["B2"].Value = "Group B"; 
     worksheet.Cells["B3"].Value = "Group A"; 
     worksheet.Cells["C1"].Value = "Col3"; 
     worksheet.Cells["C2"].Value = 634.5; 
     worksheet.Cells["C3"].Value = 274.5; 
     worksheet.Cells["D1"].Value = "Col4"; 
     worksheet.Cells["D2"].Value = 996440; 
     worksheet.Cells["D3"].Value = 185780; 

     package.Save(); 
    } 

    //Reopen the file 
    using (var package = new ExcelPackage(existingFile)) 
    { 
     var workBook = package.Workbook; 
     if (workBook != null) 
     { 
      if (workBook.Worksheets.Count > 0) 
      { 
       var currentWorksheet = workBook.Worksheets.First(); 
       var lastrow = currentWorksheet.Dimension.End.Row; 
       var lastcol = currentWorksheet.Dimension.End.Column; 
       for (var i = 1; i <= lastrow; i++) 
        for (var j = 1; j <= lastcol; j++) 
         Console.WriteLine(currentWorksheet.Cells[i, j].Value); 
      } 
     } 
    } 

    //Delete the file 
    existingFile.Delete(); 
} 
0

У меня была такая же проблема ... Но я нашел решение:

В методе «SaveAs», Я создавал FileStream, который не был удален.

До:

 ExcelPackage excel_package = new ExcelPackage(new MemoryStream()); 

     //... 
     //Do something here 
     //... 

     excel_package.SaveAs(new FileStream("filename.xlsx", FileMode.Create)); 
     excel_package.Dispose(); 

После:

 ExcelPackage excel_package = new ExcelPackage(new MemoryStream()); 

     //... 
     //Do something here 
     //... 

     var file_stream = new FileStream("filename.xlsx", FileMode.Create); 
     excel_package.SaveAs(file_stream); 
     file_stream.Dispose(); 
     excel_package.Dispose(); 

Обратите внимание, что память потока открыт во время объявления ExcelPackage не был явно расположен, потому что последняя команда «excel_package.Dispose () «уже делает это внутренне.

Надеюсь, что это поможет.

Смежные вопросы