✨
exceljs ヘッダーを除外するとかダブルクォートをつけるとか
とある案件でCSVを出力する際にexceljsを使うことになり、その際要件としてヘッダーを除外する必要がありました。
exceljsのversitonは4.3.0です。
ヘッダー除外
以下のように出力時のオプションでheaders=falseと指定すればヘッダーが消えると期待しましたがダメでした。
const uint8Array = await workbook.csv.writeBuffer({
formatterOptions: {
headers: false, // ヘッダーが出力対象外となる訳ではない?
}
});
結局、次のようにspliceRowsで1行目を削除することで対応しました。
worksheet.spliceRows(1, 1);
ただし、ヘッダー行を消した場合はデータが設定されてるところまでしか項目がCSVとして出力されないので注意してください。
例えば、「A,B,C,D」と4項目あるCSVで、Cまでしかデータが存在しない場合は「A,B,C」と出力されます。「A,B,C,」とはなりません。
データの欠落が問題になる場合は、最後の項目にNull値を与える+ダブルクォートを付与する必要があります。
worksheet.columns = [
{ header: 'ID', key: 'id' },
{ header: '名前', key: 'name' },
{ header: '住所', key: 'address' },
{ header: '備考', key: 'remarks' },
];
// remarksにNull値を与える
worksheet.addRow({id: 1001, name: '名前A', address: '住所A', remarks: ''});
worksheet.addRow({id: 1002, name: '名前B', address: '住所B', remarks: ''});
worksheet.addRow({id: 1003, name: '名前C', address: '住所C', remarks: ''});
worksheet.spliceRows(1, 1);
const uint8Array = await workbook.csv.writeBuffer({
formatterOptions: {
headers: false,
quoteColumns: [false,true,true,true], // remarksにもダブルクォートを付けるようにする
}
});
ちなみに、ダブルクォートはwriteBufferの出力時にquoteColumnsで指定しなければ付与されないことに注意です。
※データに改行やダブルクォートが存在する場合は自動で付与されます
Discussion