为了账号安全,请及时绑定邮箱和手机立即绑定

导出到 excel 返回空白表

导出到 excel 返回空白表

C#
三国纷争 2022-01-09 15:45:19
我正在尝试使用封闭的 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");                }            }}当我调试时,我可以看到数据表有数据,但它导出一个空白的
查看完整描述

2 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

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


http://www.dispatchertimer.com/tutorial/how-to-create-an-excel-file-in-net-using-openxml-part-2-export-a-collection-to-spreadsheet/

http://www.dispatchertimer.com/tutorial/how-to-create-an-excel-file-in-net-using-openxml-part-3-add-stylesheet-to-the-spreadsheet/(用于样式建议)

这是我如何在控制器中运行 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();

      }


查看完整回答
反对 回复 2022-01-09
?
炎炎设计

TA贡献1808条经验 获得超4个赞

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


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 472 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号