Экспорт в Excel возвращает пустой лист - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь экспортировать данные, используя закрытый 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");
                }
            }
}

Когда я отлаживаю, я вижу, что в datatable есть данные, но он экспортирует пустую

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Эй, я сам написал исключительный докладчик для наших предложений. Я использовал этот учебник, чтобы начать экспорт в Excel:

и вот фрагмент кода, как я запускаю экспорт в 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();
      }
0 голосов
/ 10 сентября 2018

У меня не было MS-Office, установленного в моей системе, и я должен был сгенерировать файл и отправить его по электронной почте. Таким образом, конечной целью было отправить Excel пользователю с правами администратора. Когда я написал код для отправки его на электронную почту и проверил электронную почту, Excel показал данные, но когда я возвращал их из того же кода, это был чистый лист. Может быть, мне следовало использовать interlo dll.

...