Имя листа Xlsx, длина которого превышает 31 символ в react

#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');