Как установить ширину всего столбца на основе содержимого при экспорте файлов .xlsx с помощью js-xlsx?

Я хочу установить ширину столбца, равную максимальной длине содержимого этого столбца при экспорте файлов .xlsx с помощью js-xlsx

Как установить ширину ячейки, когда экспортировать файлы .xlsx с помощью js-xlsx

Я пробовал с выше.

let sheet = workBook.Sheets.Sheet1;
let wscols = [];
const colNode = table.tHead.rows[0].childNodes; // getting the column names from the table rendered on the page
const colNumber = colNode.length;
for(let i = 0; i < colNumber; i++){
    wscols.push({
        wch: colNode[i].innerText.length * 1.28
    })
}
sheet['!cols'] = wscols;

Я могу установить ширину, выбрав имя столбца из таблицы, отображаемой на экране. Но проблема, которую я получаю, заключается в том, что предположим, что имя столбца с именем «Заголовок», а его строки имеют какое-то значение, например «Австралия», тогда длина имени столбца меньше, а вся ширина столбца не установлена ​​​​должным образом.

Фактический введите здесь описание изображения

Ожидается введите здесь описание изображения


person Kikit    schedule 25.06.2019    source источник
comment
Прокрутите свои данные и попытайтесь выяснить, есть ли тексты с большим количеством символов, чем заголовки столбцов, если да, используйте эти значения для установки параметра wch   -  person codtex    schedule 28.06.2019
comment
это будет излишним, поскольку есть миллионы данных.   -  person Kikit    schedule 01.07.2019


Ответы (1)


private autofitColumns(json: any[], worksheet: XLSX.WorkSheet, header?: string[]) {

const jsonKeys = header ? header : Object.keys(json[0]);

let objectMaxLength = []; 
for (let i = 0; i < json.length; i++) {
  let value = json[i];
  for (let j = 0; j < jsonKeys.length; j++) {
    if (typeof value[jsonKeys[j]] == "number") {
      objectMaxLength[j] = 10;
    } else {

      const l = value[jsonKeys[j]] ? value[jsonKeys[j]].length : 0;

      objectMaxLength[j] =
        objectMaxLength[j] >= l
          ? objectMaxLength[j]
          : l;
    }
  }

  let key = jsonKeys;
  for (let j = 0; j < key.length; j++) {
    objectMaxLength[j] =
      objectMaxLength[j] >= key[j].length
        ? objectMaxLength[j]
        : key[j].length;
  }
}

const wscols = objectMaxLength.map(w => { return { width: w} });

worksheet["!cols"] = wscols;

}

Из https://github.com/SheetJS/sheetjs/issues/1473#issuecomment-580648494

person Geovani Anholete    schedule 26.01.2021
comment
Отличное решение. Спасибо! - person Faruk AYDIN; 18.03.2021