Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
19 changes: 11 additions & 8 deletions lib/xlsx/xform/book/workbook-xform.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [];

Expand Down
40 changes: 40 additions & 0 deletions test/testMultiplePrintAreaOut.js
Original file line number Diff line number Diff line change
@@ -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);
});