diff --git a/README.md b/README.md index 2a5f1dcdb..bd7efa517 100644 --- a/README.md +++ b/README.md @@ -361,6 +361,9 @@ worksheet.pageSetup.margins = { // Set Print Area for a sheet worksheet.pageSetup.printArea = 'A1:G20'; +// Set multiple Print Areas by separating print areas with '&&' +worksheet.pageSetup.printArea = 'A1:G10&&A11:G20'; + // Repeat specific rows on every printed page worksheet.pageSetup.printTitlesRow = '1:3'; diff --git a/lib/xlsx/xform/book/workbook-xform.js b/lib/xlsx/xform/book/workbook-xform.js index 9db20c626..a21fa9ebf 100644 --- a/lib/xlsx/xform/book/workbook-xform.js +++ b/lib/xlsx/xform/book/workbook-xform.js @@ -34,14 +34,17 @@ class WorkbookXform extends BaseXform { let index = 0; // sheets is sparse array - calc index manually model.sheets.forEach(sheet => { if (sheet.pageSetup && sheet.pageSetup.printArea) { - const printArea = sheet.pageSetup.printArea.split(':'); - const definedName = { - name: '_xlnm.Print_Area', - ranges: [`'${sheet.name}'!$${printArea[0]}:$${printArea[1]}`], - localSheetId: index, - }; - printAreas.push(definedName); - } + sheet.pageSetup.printArea.split('&&').forEach(printArea => { + const printAreaComponents = printArea.split(':'); + const definedName = { + name: '_xlnm.Print_Area', + ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`], + localSheetId: index, + }; + printAreas.push(definedName); + }); + } + if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) { const ranges = []; diff --git a/test/testMultiplePrintAreaOut.js b/test/testMultiplePrintAreaOut.js new file mode 100644 index 000000000..b6728f051 --- /dev/null +++ b/test/testMultiplePrintAreaOut.js @@ -0,0 +1,40 @@ +const Excel = require('../excel'); + +const {Workbook} = Excel; + +const [, , filename] = process.argv; + +const wb = new Workbook(); +const ws = wb.addWorksheet('test sheet'); + +for (let row = 1; row <= 10; row++) { + const values = []; + if (row === 1) { + values.push(''); + for (let col = 2; col <= 10; col++) { + values.push(`Col ${col}`); + } + } else { + for (let col = 1; col <= 10; col++) { + if (col === 1) { + values.push(`Row ${row}`); + } else { + values.push(`${row}-${col}`); + } + } + } + ws.addRow(values); +} + +ws.pageSetup.printTitlesColumn = 'A:A'; +ws.pageSetup.printTitlesRow = '1:1'; +ws.pageSetup.printArea = 'A1:B5&&A6:B10'; + +wb.xlsx + .writeFile(filename) + .then(() => { + console.log('Done.'); + }) + .catch(error => { + console.log(error.message); + });