2016-03-31 29 views
0

Bir çalışma kitabı (.xlsx) veren bir ASP.NET Mvc özel FileResult oluşturdum. (Kapalı bir Akışı erişemez) bir hata atıyor kodlarının Bu satırdaÇalışma kitabından çıktı alma özel FileResult kullanarak NPOI kitaplığında oluşturun

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); 
    } 
} 

:

altına kodlarına bakın ben burada bir şey eksik output.Write(ms.GetBuffer(), 0, (int)ms.Length);

?

cevap

0

Sadece neyin yanlış gittiğini anladım. Bir sebepten dolayı NPOI çalışma kitabını bir akışa yazmayı bitirdiğinde, onu kapatır.

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

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

var buffer = ms.ToArray(); 
var bytesRead = buffer.Length; 

O halde şimdi müşteriye bunu geçirebilirsiniz:

Yani kodları bunu yapmak gerekir çalışması için