#javascript #reactjs #excel #xlsx
Вопрос:
Я использую react для получения табличных данных из базы данных и экспорта их в excel, а название excel делаю именем таблицы. Но я сталкиваюсь с проблемой, если имя файла excel превышает 31 символ, лист не загружается. И бросает ниже ошибку в выводе консоли браузера.
Uncaught Error: Sheet names cannot exceed 31 chars
Вот мой код ниже
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) amp; 0xFF; return buf; } saveAs(new Blob([s2ab(output)], {type:"application/octet-stream"}), title '.xlsx');
Редактировать: Я не хочу менять имя листа. Просто хотел, чтобы реагировали на загрузку, даже если имена листов превышают 31 символ
Комментарии:
1. Как называется ваш столик? Суть в том, что 31 символ-это жесткий потолок для длины имени листа. Я не знаю, как реагировать, но это здесь … рабочая тетрадь. Листы[название]=Рабочий лист … объект «Рабочий лист», скорее всего, содержит более 31 символа. Почему бы тебе не сменить его на это … рабочая тетрадь. Листы[название]=»Тест» … и посмотрим, сработает ли это.
2. Я уже пробовал это. Но когда он дает мне пустой лист Excel
Ответ №1:
Решается путем внесения следующих изменений
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) amp; 0xFF; return buf; } saveAs(new Blob([s2ab(output)], {type:"application/octet-stream"}), title '.xlsx');