From aeb357df30c5b821aa2232762a939de1bc6237f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A1mal=20Rasmussen?= Date: Fri, 20 Jun 2025 14:34:44 +0100 Subject: [PATCH] Add column_alignments to addSheetFromData --- src/nullxlsx.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/nullxlsx.js b/src/nullxlsx.js index 2cc8f21..8376a23 100644 --- a/src/nullxlsx.js +++ b/src/nullxlsx.js @@ -19,7 +19,7 @@ export class NullXlsx extends NullDownloader { /** * Creates a new xlsx file * @param {string} filename Name of file once generated - * @param {Object} options Settings + * @param {{ frozen?: boolean, filter?: boolean }} [options] Settings */ constructor(filename, options) { super(filename, `${ baseContentType }.sheet`); @@ -33,14 +33,16 @@ export class NullXlsx extends NullDownloader { * Create a spreadsheet from an array of arrays of data * @param {Array>} data Cell values * @param {string} name Name of sheet + * @param {{[key: number]: 'left' | 'center' | 'right'}} [column_alignments] Column alignment settings * @return {NullXlsx} Returns itself for method chaining */ - addSheetFromData(data, name) { + addSheetFromData(data, name, column_alignments) { const i = this.sheets.length + 1; this.sheets.push({ id: i, name: this.escapeXml(name || 'Sheet' + i), - data + data, + column_alignments: column_alignments || {} }); return this; } @@ -63,6 +65,8 @@ export class NullXlsx extends NullDownloader { + '' + '' + '' + + '' + + '' + '' }, { name: 'xl/sharedStrings.xml', @@ -101,14 +105,24 @@ export class NullXlsx extends NullDownloader { } const cells = row.map((cell, cellIndex) => { const cellName = this.colName(cellIndex) + (rowIndex + 1); + const alignment = sheet.column_alignments[cellIndex]; + let alignment_style = ''; + + if (alignment === 'right') { + alignment_style = ' s="4"'; + } else if (alignment === 'center') { + alignment_style = ' s="5"'; + } + // left alignment uses default style (no explicit style needed) + if (typeof cell === 'number') { - return `${ cell }`; + return `${ cell }`; } if (cell instanceof Date) { const dateStyle = cell.getHours() || cell.getMinutes() || cell.getSeconds() ? 3 : 2; return `${ this.dateToExcelDate(cell) }`; } - return `${ this.escapeXml(cell.toString()) }`; + return `${ this.escapeXml(cell.toString()) }`; }); return `${ cells.join('') }`; });