Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用自定义FileResult输出在NPOI库中创建的工作簿_C#_Asp.net Mvc_Xlsx_Npoi_Fileresult - Fatal编程技术网

C# 使用自定义FileResult输出在NPOI库中创建的工作簿

C# 使用自定义FileResult输出在NPOI库中创建的工作簿,c#,asp.net-mvc,xlsx,npoi,fileresult,C#,Asp.net Mvc,Xlsx,Npoi,Fileresult,我创建了一个ASP.NET Mvc自定义文件结果,它将导出工作簿(.xlsx) 请参见以下代码: public class TestData { public string StudentName { get; set; } public string Course { get; set; } } public class ExcelResult<T> : FileResult { private readonly List<TestData>

我创建了一个ASP.NET Mvc自定义
文件结果
,它将导出工作簿(
.xlsx

请参见以下代码:

public class TestData
{
    public string StudentName { get; set; }

    public string Course { get; set; }
}


public class ExcelResult<T> : FileResult
{
    private readonly List<TestData> _testDataList;

    public ExcelResult(string fileName = "export.xlsx")
        : base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    {
        FileDownloadName = fileName;


        List<TestData> testDataList = new List<TestData>();

        TestData td = new TestData();
        TestData td1 = new TestData();

        td.StudentName = "Student1";
        td.Course = "BS IT";

        td1.StudentName = "Student2";
        td1.Course = "BS IT";

        testDataList.Add(td);
        testDataList.Add(td1);


        _testDataList = testDataList;
    }


    protected override void WriteFile(HttpResponseBase response)
    {
        Stream output = response.OutputStream;

        // create an Excel file objects 
        XSSFWorkbook workbook = new XSSFWorkbook();
        // add a Sheet 
        ISheet sheet1 = workbook.CreateSheet("Sheet1");

        // get list data 
        List<TestData> listRainInfo = _testDataList;

        // to sheet1 add the title of the first head row 
        IRow row1 = sheet1.CreateRow(0);
        row1.CreateCell(0).SetCellValue("Student Name");
        row1.CreateCell(1).SetCellValue("Course");

        // data is gradually written sheet1 each row 
        for (int i = 0; i < listRainInfo.Count; i++)
        {
            IRow rowtemp = sheet1.CreateRow(i + 1);
            rowtemp.CreateCell(0).SetCellValue(listRainInfo[i].StudentName.ToString());
            rowtemp.CreateCell(1).SetCellValue(listRainInfo[i].Course.ToString());
        }

        // Write to the client 
        MemoryStream ms = new MemoryStream();
        workbook.Write(ms);

        output.Write(ms.GetBuffer(), 0, (int)ms.Length);
    }
}
公共类TestData
{
公共字符串StudentName{get;set;}
公共字符串课程{get;set;}
}
公共类ExcelResult:FileResult
{
私有只读列表_testDataList;
public ExcelResult(字符串fileName=“export.xlsx”)
:base(“application/vnd.openxmlformats of cedocument.spreadsheetml.sheet”)
{
FileDownloadName=文件名;
List testDataList=新列表();
TestData td=新的TestData();
TestData td1=新的TestData();
td.StudentName=“Student1”;
td.Course=“BS IT”;
td1.StudentName=“Student2”;
td1.Course=“BS IT”;
testDataList.Add(td);
testDataList.Add(td1);
_testDataList=testDataList;
}
受保护的重写无效写文件(HttpResponseBase响应)
{
流输出=response.OutputStream;
//创建Excel文件对象
XSSFWorkbook工作簿=新XSSFWorkbook();
//添加工作表
ISheet sheet1=工作簿.CreateSheet(“sheet1”);
//获取列表数据
List listRainInfo=\u testDataList;
//在图纸1中添加第一行标题
IRow row1=sheet1.CreateRow(0);
行1.CreateCell(0.SetCellValue(“学生名”);
行1.CreateCell(1.SetCellValue(“课程”);
//数据逐渐写入每行1页
for(int i=0;i
在这行代码中,它抛出错误(无法访问封闭流):
output.Write(ms.GetBuffer(),0,(int)ms.Length)


我是不是遗漏了什么?

我只是想知道出了什么问题。出于某种原因,一旦我在流中完成工作簿的编写,它就会将其关闭

因此,要使代码正常工作,我们需要这样做:

MemoryStream ms = new MemoryStream();
workbook.Write(ms);

var buffer = ms.ToArray();
var bytesRead = buffer.Length;
然后我们现在可以将其传递给客户端:

response.OutputStream.Write(buffer, 0, btyesRead);