Skip to content

Commit

Permalink
Merge pull request exceljs#1042 from AlexanderPruss/1041-MultiplePrin…
Browse files Browse the repository at this point in the history
…tAreas

1041 multiple print areas
  • Loading branch information
guyonroche authored Jan 6, 2020
2 parents e8d5c73 + 9072823 commit b420ec5
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 8 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,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);
});

0 comments on commit b420ec5

Please sign in to comment.