How to Print Multiple Sheets in JavaScript Spreadsheet?
This article explains how to print the multiple sheets in the JavaScript Spreadsheet component.
You can use fileMenuItemSelect and dataBound events to print the multiple sheets of data. To print the sheets, use the file menu and select print option. Using below code you can be able to print the multiple sheets.
[HTML]
<div id="spreadsheet"></div>
[TS]
let ssEle: HTMLElement = createElement("div", {
className: "e-sheet-panel",
innerHTML:
'<div class="customItems"></div><div class="e-sheet"><div class="e-main-panel style="height:100%" style="overflow: unset"><div class="e-sheet-content" ></div></div></div>'
}); // creating same hierarchy of element as DOM
let isPrint: boolean = false;
//Initialize Spreadsheet component
let spreadsheet: Spreadsheet = new Spreadsheet({
sheets: [
{
name: 'CarSalesReport',
ranges: [{ dataSource: (dataSource as any).data }], // you can refer this datasource in this link https://ej2.syncfusion.com/javascript/demos/spreadsheet/default/datasource.js
rows: [
{
index: 30,
cells: [
{ index: 4, value: 'Total Amount:', style: { fontWeight: 'bold', textAlign: 'right' } },
{ formula: '=SUM(F2:F30)', style: { fontWeight: 'bold' } },
]
}],
columns: [
{ width: 180 }, { width: 130 }, { width: 130 }, { width: 180 },
{ width: 130 }, { width: 120 }
]
},
{
name: 'OrderDetails',
ranges: [{ dataSource: (dataSource as any).orderDetails }], // you can refer this datasource in this link https://ej2.syncfusion.com/javascript/demos/spreadsheet/default/datasource.js
columns: [
{ width: 64 }, { width: 120 }, { width: 88 }, { width: 220 },
{ width: 100 }, { width: 78 }, { width: 78 }]
}],
created: (): void => {
spreadsheet.cellFormat({ fontWeight: 'bold', textAlign: 'center', verticalAlign: 'middle' }, 'CarSalesReport!A1:F1');
spreadsheet.cellFormat({ fontWeight: 'bold', textAlign: 'center', verticalAlign: 'middle' }, 'OrderDetails!A1:I1');
spreadsheet.numberFormat('$#,##0.00', 'F2:F31');
spreadsheet.addFileMenuItems([{ text: "Print" }], "Save As");
},
fileMenuItemSelect: (args: MenuSelectEventArgs) => {
let sheets: SheetModel[] = spreadsheet.sheets;
if (args.item.text == "Print") {
if (spreadsheet.activeSheetIndex === 0) {
ssEle.querySelector(".e-sheet-content").innerHTML = document.querySelector(
".e-sheet-content"
).outerHTML; // To add the spreadsheet table
let usedRange: UsedRangeModel = spreadsheet.getActiveSheet().usedRange;
let tbody: Element = ssEle.querySelector('tbody');
for (let i: number = tbody.getElementsByClassName('e-row').length; i >= 0; i--) {
if (tbody.getElementsByClassName('e-row')[i] && parseInt(tbody.getElementsByClassName('e-row')[i].getAttribute('aria-rowindex')) > usedRange.rowIndex + 1) {
tbody.getElementsByClassName('e-row')[i].remove();
}
}
if (sheets[spreadsheet.activeSheetIndex + 1]) {
spreadsheet.goTo(sheets[spreadsheet.activeSheetIndex + 1].name + "!A1");
isPrint = true;
} else {
print(ssEle);
ssEle.querySelector(".e-sheet-content").innerHTML = '';
}
} else {
if (sheets[0]) {
spreadsheet.goTo(sheets[0].name + "!A1");
isPrint = true;
}
}
}
},
dataBound: () => {
if (isPrint) {
ssEle.querySelector(".e-sheet-content").innerHTML += document
.querySelector(".e-sheet-content").outerHTML;
let usedRange: UsedRangeModel = spreadsheet.getActiveSheet().usedRange;
let tbody: Element = ssEle.querySelector('.e-sheet-content').children[spreadsheet.activeSheetIndex].querySelector('tbody');
for (let i: number = tbody.getElementsByClassName('e-row').length; i >= 0; i--) {
if (tbody.getElementsByClassName('e-row')[i] && parseInt(tbody.getElementsByClassName('e-row')[i].getAttribute('aria-rowindex')) > usedRange.rowIndex + 1) {
tbody.getElementsByClassName('e-row')[i].remove();
}
}
let sheets: SheetModel[] = spreadsheet.sheets;
if (sheets.length - 1 === spreadsheet.activeSheetIndex) {
let count: number = ssEle.querySelector(".e-sheet-content").childElementCount;
if (count > 1) {
for (let i: number = 0; i < count; i++) {
(ssEle.querySelector('.e-sheet-content').children[i].getElementsByClassName('e-virtualtrack')[0] as HTMLElement).style.height = 'auto';
ssEle.querySelector('.e-sheet-content').children[i].setAttribute('style', 'page-break-after: always;')
}
}
print(ssEle);
isPrint = false;
ssEle.querySelector(".e-sheet-content").innerHTML = '';
} else {
if (sheets[spreadsheet.activeSheetIndex + 1]) {
spreadsheet.goTo(sheets[spreadsheet.activeSheetIndex + 1].name + "!A1");
}
}
}
}
});
//Render initialized Spreadsheet component
spreadsheet.appendTo('#spreadsheet');
Refer to our documentation and online samples for more features. If you have any queries, please let us know in the comments below. You can also contact us through our Support forum or Support ticket. We are happy to assist you!
Conclusion
I hope you enjoyed learning on how to print multiple sheets in JavaScript Spreadsheet.
You can refer to our JavaScript Spreadsheet feature tour page to know about its other groundbreaking feature representations and documentation, and how to quickly get started for configuration specifications. You can also explore our JavaScript Spreadsheet example to understand how to create and manipulate data.
For current customers, you can check out our components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our other controls.
If you have any queries or require clarifications, please let us know in the comments section below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!