Estoy tratando de descargar una Lista de elementos como Excel del proyecto del lado del servidor Blazor. Usé CsvHelper para generar el byte[] de la lista y usé el siguiente código para descargar el contenido del byte[] como archivo de Excel.
El código de Blazor Component es el siguiente [Haga clic en el evento del botón para descargar Excel]
@inject IJSRuntime JsRuntime private async Task ExportToExcel() { jobStarted = true; var fileBytes= ExportHelper.ConvertContactDataToCsv(); // This will return byte[] of contacts if (await JsRuntime.InvokeAsync<bool>("confirm", $"Do you want to Export?")) { var fileName = $"Contacts"; await JsRuntime.InvokeAsync<object>("saveAsFile", fileName, Convert.ToBase64String(fileBytes)); } jobStarted = false; }El código Javascript es como a continuación
window.saveAsFile = function (fileName, byteBase64) { var link = this.document.createElement('a'); link.download = fileName; link.href = "data:application/vnd.ms-excel;base64," + byteBase64; this.document.body.appendChild(link); link.click(); this.document.body.removeChild(link); }La ejecución de esto genera el archivo sin ningún problema, pero al abrir el archivo con Microsoft Excel, el mensaje de advertencia es como
El formato de archivo y la extensión de 'Contacts.xls' no coinciden. El archivo podría estar dañado o no ser seguro. A menos que confíes en su fuente, no lo abras. ¿Quieres abrirlo de todos modos?
Y si ignoro la advertencia y procedo a abrir todo el contenido en Excel, se ve bien
Ahora traté de generar un archivo con la extensión xlsx y un tipo mimo diferente dentro del código JS Los cambios son como
var fileName = $"Contacts.xlsx";y dentro de JS probé estas 2 combinaciones por separado
link.href = "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," + byteBase64; link.href = "data:application/octet-stream;base64," + byteBase64;El código se ejecutó sin problemas y los archivos se generaron, pero al abrir el archivo, la advertencia es como
Excel no puede abrir el archivo 'Contactos.xlsx' porque el formato de archivo para la extensión de archivo no es válido.' Verifique que el archivo no se haya dañado y que la extensión del archivo coincida con el formato del archivo
No puedo abrir el archivo en absoluto.
Entonces, ¿cuál es el tipo MIME correcto que se debe usar para garantizar que el archivo de Excel descargado se pueda abrir en Excel sin advertencias?
Dado que está utilizando CsvHelper (a través ConvertContactDataToCsv ), su archivo de salida es un archivo de texto de valores separados por comas, no un archivo binario Excel .xls .
No use la extensión de archivo .xls , en su lugar use, por ejemplo, .csv ; entonces Contacts.csv en lugar de Contacts.xls .
Para el tipo mime, puede usar text/csv .
Pero, sobre todo, es la extensión de archivo incorrecta la que genera un error de Excel en ese archivo.