web-dev-qa-db-ja.com

js-xlsxで.xlsxファイルをエクスポートするときにセル幅を設定する方法

Js-xlsxを使用して、エクスポートしたExcelファイルに固定列/セル幅を設定しようとしています。

編集:

Js-xlsxのソースは次のとおりです。 https://github.com/SheetJS/js-xlsx

Data View

26
jgabrielfaria

ここで書き込みテストのスニペットを見つけました 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;
62
ShermanL

セルの幅と同様に、次の方法でセルの高さを設定できます

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
4
SridharKritha

質問を拡張して、コンテンツに自動幅ベースを設定する必要がある場合、次のように書くことができます。

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)) }));
}

この関数は、最初の行にほとんどの列があることを前提としています。次に、コンテンツの文字の長さを計算して、各列の最も広いセルを見つけようとします。

1
Icycool