Js-xlsxを使用して、エクスポートしたExcelファイルに固定列/セル幅を設定しようとしています。
編集:
Js-xlsxのソースは次のとおりです。 https://github.com/SheetJS/js-xlsx
ここで書き込みテストのスニペットを見つけました https://github.com/SheetJS/js-xlsx/blob/master/tests/write.js#L14-L19
クイックリファレンスについては、wsはワークシートです。
var wscols = [
{wch:6},
{wch:7},
{wch:10},
{wch:20}
];
ws['!cols'] = wscols;
セルの幅と同様に、次の方法でセルの高さを設定できます
var wsrows = [
{hpt: 12}, // row 1 sets to the height of 12 in points
{hpx: 16}, // row 2 sets to the height of 16 in pixels
];
ws['!rows'] = wsrows; // ws - worksheet
ヒント:ワークシートデータが自動生成され、行と列の数がわからない場合は、次の方法を使用して、セル幅/高さの書式設定を行うためのワークシート内の行と列の数を見つけることができます。
var range = XLSX.utils.decode_range(ws['!ref']);
var noRows = range.e.r; // No.of rows
var noCols = range.e.c; // No. of cols
質問を拡張して、コンテンツに自動幅ベースを設定する必要がある場合、次のように書くことができます。
const worksheet = XLSX.utils.aoa_to_sheet(arrayOfArray);
worksheet['!cols'] = fitToColumn(arrayOfArray);
function fitToColumn(arrayOfArray) {
// get maximum character of each column
return arrayOfArray[0].map((a, i) => ({ wch: Math.max(...arrayOfArray.map(a2 => a2[i].toString().length)) }));
}
この関数は、最初の行にほとんどの列があることを前提としています。次に、コンテンツの文字の長さを計算して、各列の最も広いセルを見つけようとします。