C# 保存工作簿时无法访问已关闭的文件

C# 保存工作簿时无法访问已关闭的文件,c#,spreadsheetgear,C#,Spreadsheetgear,我正在尝试使用电子表格设备保存包含一些数据的工作簿。下面是相关代码 public class ExcelExporter { public void Export(System.IO.Stream stream, IEnumerable<LabDataEntity> readings) { using (stream) { var workset = SpreadsheetGear.Factory.GetWork

我正在尝试使用电子表格设备保存包含一些数据的工作簿。下面是相关代码

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);
        }
    }
}
公共类导出器
{
public void导出(System.IO.Stream,IEnumerable reads)
{
使用(流)
{
var workset=SpreadsheetGear.Factory.GetWorkbookSet();
var workBook=workset.Workbooks.Add();
var errorWorkSheet=workBook.Worksheets.Add();
errorWorkSheet.Name=“文件错误”;
SpreadsheetGear.IRange errorCells=errorWorkSheet.Cells;
errorWorkSheet.Cells.ShrinkToFit=true;
errorCells[0,1]。Value=“DCP ID”;
errorCells[0,2]。Value=“DCP名称”;
errorCells[0,3]。Value=“站点ID”;
errorCells[0,4].Value=“站点名称”;
int i=1;
foreach(读数中的var rdg)
{
errorCells[i,0]。值=rdg.DCPCode;
errorCells[i,1]。值=rdg.DCPName;
errorCells[i,2].Value=rdg.SiteID;
errorCells[i,3].Value=rdg.SiteName;
i++;
}
SaveToStream(stream、SpreadsheetGear.FileFormat.OpenXMLWorkbook);
}
}
}

然后,尝试将工作簿保存到流(工作簿.SaveToStream())时出错

我知道在system.web部分的web.config中添加代码之前和之后都有人问过这个问题,但仍然会出现错误

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


非常感谢您的帮助。

基于您在评论中所说的内容。我确信您在调用有问题的方法之前正在处理流

因此,您应该检查在方法调用之前出现的代码,确保在方法调用之前没有处理或关闭流


关于处理的更多信息:

在调用posted方法后是否尝试使用同一个流?否实际上,在using语句之后没有使用该流。我甚至在错误行之后添加了stream.close(),但没有起作用。在错误行之后关闭流也没有帮助,因为它已经被释放了,这也不应该发生。到底是哪一行导致了这个错误?是的,我知道我只是想确保在调用第二个方法之前它是关闭的,然后我将这个方法包装在一个using块中。实际上,在尝试将工作簿保存到流时会出现错误。(SaveToStream方法)。在完成该流之前,不应关闭或处置该流。您在这里遇到错误,因为流在调用此方法之前已被释放。所以实际上你的问题是在调用这个方法之前处理流。实际上,我解决了这个问题,原因是,我有一个调用这个导出方法的回调函数,它执行了两次,第二次流已经关闭。非常感谢您抽出时间。