0

I am using DevExtreme DxDataGridComponent. I have two different components contains DataGrid and another component where I have export button. Now I need to export the data of those grid into single excel file. I have tried many solutions but did not find feasible solution. All I got is you can export a data of one grid at a time.

Below is my excel service to which I was passing data.

import { Injectable } from '@angular/core';
import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';


const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
const EXCEL_EXTENSION = '.xlsx';

@Injectable()
export class ExcelService {

  constructor() { }

  public exportAsExcelFile(json: any[], excelFileName: string): void {
    const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
    const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
    const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
    this.saveAsExcelFile(excelBuffer, excelFileName);
  }

  private saveAsExcelFile(buffer: any, fileName: string): void {
    const data: Blob = new Blob([buffer], {
      type: EXCEL_TYPE
    });
    FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);
  }

}

Another thing is I have prepared one data object where I have prepared some data.

data = [{
    a: something.a,
    b: something.b,
    c: something.c
}]

and what i did is, listArr.push(data); then what I did is: this.excelService.exportAsExcelFile(listArr, 'sample');

I have given a call to excel service, now this method is just taking the last row. What do I mean by that is lets say I have 4 rows then it is just picking up the last row n printing it into the excel. this is the another issue.

Could you please help me in this.

  • So the `exportAsExcelFile` method takes a `json` array and writes that into the excel file. Could you not just merge both of your datasets using `concat`, then pass that array to your `exportAsExcelFile` method? – ViqMontana Nov 19 '18 at 16:08
  • I am passing the array only to the exportAsExcelFile(listArr) like this but in end lets say you have 4 rows then it just writes the last 4th row into the excel. – Vaibhav Gadge Nov 20 '18 at 07:44
  • Hmmm, not sure what's happening then. Take a look at [this](https://stackblitz.com/edit/angular6-export-xlsx-w8ikst) working SlackBlitz, Fork it and edit it to reproduce your issue. – ViqMontana Nov 20 '18 at 08:02
  • To export several DataGrids into one file, you can use the ExcelJS library with the DevExpress.excelExporter.exportDataGrid function. For more information, check [DataGrid.ExcelJS CTP export - How to export several DataGrids to the same worksheet using the ExportDataGrid function.](https://supportcenter.devexpress.com/ticket/details/t810790/datagrid-exceljs-ctp-export-how-to-export-several-datagrids-to-the-same-worksheet-using) – Максим Коняев Apr 22 '20 at 13:07

0 Answers0