epplus dispose不起作用

时间:2014-11-12 18:28:00

标签: dispose epplus

我用epplus打开一个excel文件。

在阅读完一些数据后,我想关闭包裹:

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

不幸的是,excel文件仍然被阻止。我需要关闭整个应用程序以解锁excel文件。

我用Google搜索,但除上述内容外没有任何其他用处。

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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()”已在内部执行此操作。

希望有所帮助。