Estoy tratando de convertir el archivo .xlsx en un archivo .csv antes de enviarlo a la API (porque solo acepta archivos .csv);
Estoy usando el paquete xlsx y obtuve esta función que lo convierte para mí, pero el problema es que esta función hará que el usuario descargue el archivo, y no quiero eso, solo quiero que lo guarde como un objeto, así que puede usarlo solo para la API (y no le diga al usuario que está convertido).
Aquí está el código:
file.arrayBuffer().then(res => { let data = new Uint8Array(res) let workbook = XLSX.read(data, {type: "array"}) let first_sheet_name = workbook.SheetNames[0] let worksheet = workbook.Sheets[first_sheet_name] let jsonData = XLSX.utils.sheet_to_json(worksheet, {raw: false, defval: null}) let fileName; if (file) { fileName = file?.name.substring(0, file?.name?.indexOf(".")) } let new_worksheet = XLSX.utils.json_to_sheet(jsonData); let new_workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(new_workbook, new_worksheet, "csv_sheet") getRandomRows(jsonData) XLSX.writeFile(new_workbook, fileName + ".csv") })Me preguntaba si hay otras opciones también.
Lo arreglé de esta manera:
let dataToSheet = XLSX.utils.json_to_sheet(data) const dataFileCSV = XLSX.utils.sheet_to_csv(dataToSheet, {raw: false, defval: null}); let blob = new Blob(["\ufeff", dataFileCSV]); let fileBlob = new File([blob], "name");Basado en Léame de xlsx, intente usar writeFileAsync o simplemente write en lugar de writeFile ya que obliga al navegador a comenzar la descarga