我有一个列表,正在尝试使用以下代码和ClosedXML nuget包将其导出到Excel,并遵循在线指南:
private async TaskClickExportXLS()
{
await ExportToExcel(js, selectedFlyer.DealNo+"_SKY_CAT_Report.xlsx");
}
public async Task ExportToExcel(IJSRuntime js, string fileName)
{
blockProducts = blocks.SelectMany(b => b.Products).Distinct().ToList();
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Sku Category Report");
ws.Cell(1, 1).Value = "SKU";
ws.Cell(1, 2).Value = "Product EN";
ws.Cell(1, 3).Value = "Product FR";
ws.Cell(1, 4).Value = "Category";
foreach(var item in blockProducts)
{
ws.Cell(1, 1).Value = item.Sku;
ws.Cell(1, 2).Value = item.ProductEn;
ws.Cell(1, 3).Value = item.ProductFr;
ws.Cell(1, 4).Value = item.MainCategory;
}
MemoryStream XLSStream = new();
XLSStream.Position = 0;
wb.SaveAs(XLSStream);
var XLSSArray = XLSStream.ToArray();
await js.InvokeVoidAsync("BlazorDownloadFile", fileName, XLSSArray);
}
我也从指南中复制了这个js运行时文件:
function BlazorDownloadFile(filename, content) {
// Create the URL
const file = new File([content], filename, { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
const exportUrl = URL.createObjectURL(file);
// Create the <a> element and click on it
const a = document.createElement("a");
document.body.appendChild(a);
a.href = exportUrl;
a.download = filename;
a.target = "_self";
a.click();
URL.revokeObjectURL(exportUrl);
}
我的文件下载成功,但是当我打开它时,出现“Excel无法打开文件,因为文件格式或扩展名无效”的提示。我已经上网做了研究,并尝试了以下方法 - 将流的位置设置为0。 在我的openfile.js中将文件类型更改为以下内容:
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
然而这似乎不能解决问题,当我调试代码时,代码似乎正常工作。任何帮助将不胜感激!
async void
。 - Panagiotis Kanavos