Articles in this section
Category / Section

How to print multiple sheets in JavaScript Spreadsheet?

3 mins read

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!

 

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