Я хотел бы спросить, как я могу сгенерировать файл Excel, используя NPOI, а затем вернуть его как FileStream
, а затем вернуть как FileContentResult
[HttpGet]
public IActionResult Excel()
{
var excelResult = GenerateExcel();
return new FileStreamResult(excelResult, MediaTypeNames.Text.Plain);
}
public MemoryStream GenerateExcel()
{
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet1 = workbook.CreateSheet("Sheet1");
sheet1.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10));
var rowIndex = 0;
IRow row = sheet1.CreateRow(rowIndex);
row.Height = 30 * 80;
row.CreateCell(0).SetCellValue("this is content");
sheet1.AutoSizeColumn(0);
rowIndex++;
var sheet2 = workbook.CreateSheet("Sheet2");
var style1 = workbook.CreateCellStyle();
style1.FillForegroundColor = HSSFColor.Blue.Index2;
style1.FillPattern = FillPattern.SolidForeground;
var style2 = workbook.CreateCellStyle();
style2.FillForegroundColor = HSSFColor.Yellow.Index2;
style2.FillPattern = FillPattern.SolidForeground;
var cell2 = sheet2.CreateRow(0).CreateCell(0);
cell2.CellStyle = style1;
cell2.SetCellValue(0);
cell2 = sheet2.CreateRow(1).CreateCell(0);
cell2.CellStyle = style2;
cell2.SetCellValue(1);
var ms = new MemoryStream();
workbook.Write(ms);
return ms;
}
К сожалению, такой подход приводит к:
Невозможно получить доступ к закрытому потоку.
Какой может быть другой способ сделать это?