Articles in this section

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');

 

View Sample in StackBlitz

 

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 forumsDirect-Trac, or feedback portal. We are always happy to assist you!


 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Access denied
Access denied