c# - 导出到 excel 返回空白表
问题描述
我正在尝试使用封闭的 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");
}
}
}
当我调试时,我可以看到数据表有数据,但它导出一个空白的
解决方案
嘿,我自己为我们的提议编写了一个 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();
}
推荐阅读
- c# - 如何访问数据流脚本组件中的现有 ADO.NET 连接管理器
- c# - 两个类但相同的对象
- abap - 通过 RFC 返回动态类型的表行?
- html - 为什么 Outlook/gmail 无法正确呈现 img?
- java - 如何在 ARCore 中捕获每一帧
- html - 确保两个表格的表格宽度相同,即使它们的列数不同
- ios - 打印导入的枚举案例给出枚举名称而不是案例名称
- laravel-5 - Laravel nova 多选编辑不起作用
- kubernetes - 创建扩展现有图表的 Helm 图表
- java - 如何在 java 中修复 java.io.FileNotFoundException?