【问题标题】:Export to excel returns Blank sheet导出到 excel 返回空白表
【发布时间】:2018-09-09 12:31:02
【问题描述】:

我正在尝试使用封闭的 xml 导出数据表,但它给了我空白表。 这是我的代码

[HttpPost]
        public FileResult ExportExcel()
        {
            List<ProductModel> productDetails = (List<ProductModel>)Session["CartItems"];

            System.Data.DataTable dtExcel = CategoryDAL.ToDataTable(productDetails);


            using (XLWorkbook wb = new XLWorkbook())
            {

                wb.Worksheets.Add(dtExcel);
                using (MemoryStream stream = new MemoryStream())
                {
                    wb.SaveAs(stream);
                    return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Grid.xlsx");
                }
            }
}

当我调试时,我可以看到数据表有数据,但它导出一个空白的数据

【问题讨论】:

  • 首先,将工作簿保存到物理文件并进行检查。如果文件没问题,那么问题在于您向 Web 客户端的交付。

标签: c# closedxml


【解决方案1】:

嘿,我自己为我们的提议编写了一个 excelexporter。 我使用本教程开始使用 excel 导出:

这是一个代码 sn-p 我如何在控制器中运行 excel 导出:

 public async Task<FileResult> DownloadExcel(long id, CancellationToken token)
    {
      var entites= await _someRepository.GetSomethingAsync(id, token).ConfigureAwait(false);
      var report = _excelExporter.Export(entites.OrderByDescending(d => d.Date));
      return File(report, MimeTypes.GetMimeType("excel.xlsx"), $"entities.xlsx");
    }

生成 excel 电子表格是通过内存流完成的。以下是我如何开始创建 excel 文件的几行代码:

         using (MemoryStream mem = new MemoryStream())
      {
        using (var document = SpreadsheetDocument.Create(mem, SpreadsheetDocumentType.Workbook))
        {
          var workbookPart = document.AddWorkbookPart();
          workbookPart.Workbook = new Workbook();

          var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
          worksheetPart.Worksheet = new Worksheet();


          var sheets = workbookPart.Workbook.AppendChild(new Sheets());
          var sheet = new Sheet
          {
            Id = workbookPart.GetIdOfPart(worksheetPart),
            SheetId = 1,
            Name = "Report"
          };
          sheets.Append(new[] { sheet });
          workbookPart.Workbook.Save();

          var sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
          // Constructing header
          var row = new Row();
          // This needs to get adjusted for your needs
          // it returns IEnumerable<Cell>
          row.Append(GenerateHeaderCells(/*FillMe*/));

          // Insert the header row to the Sheet Data
          sheetData.AppendChild(row);

          foreach (var entity in data)
          {

            row = new Row();
//This needs to get adjusted
// it returns IEnumerable<Cell>
            row.Append(GenerateCells(/*FillMe*/));

            sheetData.AppendChild(row);
          }
          worksheetPart.Worksheet.Save();
        }

        return mem.ToArray();
      }

【讨论】:

    【解决方案2】:

    我的系统上没有安装 MS-Office,我的要求是生成文件并将其发送到电子邮件。所以最终目标是将excel发送给管理员用户。当我编写代码将其发送到电子邮件并检查电子邮件时,excel 显示了数据,但是当我从相同的代码返回它时,它是一张白纸。也许我应该使用互操作 dll。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多