NPOI Excel - Как я могу вернуть FileStream, не сохраняя его? - PullRequest
0 голосов
/ 27 мая 2019

Я хотел бы спросить, как я могу сгенерировать файл 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;
}

К сожалению, такой подход приводит к:

Невозможно получить доступ к закрытому потоку.

Какой может быть другой способ сделать это?

...