Estoy usando reaccionar para obtener datos de la tabla de la base de datos y exportarlos como Excel y hacer que el título de Excel sea el nombre de la tabla. Pero me enfrento a un problema si el nombre del archivo de Excel supera los 31 caracteres, la hoja no se descarga. Y lanzando el siguiente error en la salida de la consola del navegador.
Uncaught Error: Sheet names cannot exceed 31 charsAquí está mi código a continuación
var workbook=XLSX.utils.book_new(); workbook.SheetNames.push(title); //title: tablename var workSheet=XLSX.utils.aoa_to_sheet(tableData); //tableData: data from Database workbook.Sheets[title]=workSheet; var output=XLSX.write(workbook, {bookType:'xlsx', type:'binary'}); function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } saveAs(new Blob([s2ab(output)], {type:"application/octet-stream"}), title + '.xlsx');Editar: no quiero cambiar el nombre de la hoja. Solo quería reaccionar para descargar incluso si los nombres de las hojas superan los 31 caracteres
Resuelto haciendo los siguientes cambios.
var workbook=XLSX.utils.book_new(); //workbook.SheetNames.push(title); //title: tablename var workSheet=XLSX.utils.aoa_to_sheet(tableData); //tableData: data from Database //workbook.Sheets[title]=workSheet; XLSX.utils.book_append_sheet(workbook, workSheet, "Test"); // This line solve the problem var output=XLSX.write(workbook, {bookType:'xlsx', type:'binary'}); function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } saveAs(new Blob([s2ab(output)], {type:"application/octet-stream"}), title + '.xlsx');