首页 > 解决方案 > 保存工作簿时无法访问已关闭的文件

问题描述

我正在尝试使用 SpreadsheetGear 保存包含一些数据的工作簿。下面是它的代码。

public class ExcelExporter
{
    public void Export(System.IO.Stream stream, IEnumerable<LabDataEntity> readings)
    {
        using (stream)
        {
            var workset = SpreadsheetGear.Factory.GetWorkbookSet();
            var workBook = workset.Workbooks.Add();
            var errorWorkSheet = workBook.Worksheets.Add();

            errorWorkSheet.Name = "File Errors";
            SpreadsheetGear.IRange errorCells = errorWorkSheet.Cells;
            errorWorkSheet.Cells.ShrinkToFit = true;
            errorCells[0, 1].Value = "DCP ID";
            errorCells[0, 2].Value = "DCP Name";
            errorCells[0, 3].Value = "Site ID";
            errorCells[0, 4].Value = "Site Name";

            int i = 1;
            foreach (var rdg in readings)
            {
                errorCells[i, 0].Value = rdg.DCPCode;
                errorCells[i, 1].Value = rdg.DCPName;
                errorCells[i, 2].Value = rdg.SiteID;
                errorCells[i, 3].Value = rdg.SiteName;
                i++;
            }

            workBook.SaveToStream(stream,SpreadsheetGear.FileFormat.OpenXMLWorkbook);
        }
    }
}

无法访问已关闭的文件

然后在尝试将工作簿保存到流 (workbook.SaveToStream()) 时出现错误。

我知道在 system.web 部分的 web.config 中添加了以下代码之前已经提出了这个问题,但仍然出现错误。

  <httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false"
                 requestLengthDiskThreshold="8192"/>

非常感谢任何帮助。

标签: c#spreadsheetgear

解决方案


根据你在评论中所说的。我确定您在调用相关方法之前会处理流。

因此,您应该检查方法调用之前的代码,确保在调用方法之前它不会释放或关闭流。

有关处置的更多信息:https ://www.dotnetperls.com/using


推荐阅读