JavaScript/jQuery PivotGrid - Export
You can export PivotGrid data to Excel. Follow the steps outlined in this help topic to complete the process. For PivotGrid export demos, see:
Install Dependencies
To export PivotGrid data to Excel, you first need to install the following third-party libraries:
jQuery
<html>
<head>
<!-- ... -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.4.0/polyfill.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/exceljs/4.4.0/exceljs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.2/FileSaver.min.js"></script>
<!-- DevExtreme scripts are referenced here -->
<!-- ... -->
</head>
</html>Angular
npm install --save exceljs file-saver
{
// ...
"compilerOptions": {
// ...
"paths": {
// ...
"exceljs": [
"node_modules/exceljs/dist/exceljs.min.js"
]
}
},
// ...
}Vue
npm install --save exceljs file-saver
React
npm install --save exceljs file-saver
Enable the Export Button
PivotGrid has a built-in "Export" button. To enable this button, set the export.enabled property to true.
jQuery
$(function() {
$("#pivotGrid").dxPivotGrid({
export: {
enabled: true
}
});
});Angular
<dx-pivot-grid ... >
<dxo-export [enabled]="true"></dxo-export>
</dx-pivot-grid>Vue
<template>
<DxPivotGrid ... >
<DxExport :enabled="true" />
</DxPivotGrid>
</template>
<script>
//...
</script>React
//...
function App() {
// ...
return (
<PivotGrid ... >
<Export enabled={true} />
</PivotGrid>
);
}
export default App;Export to XLSX
All export operations use the exportPivotGrid(options) method from the excelExporter module.
Before starting with exportPivotGrid, obtain:
- A PivotGrid instance.
- A target Excel worksheet.
An instance can be obtained through an event handler like onExporting, while the worksheet needs pre-creation:
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Main sheet');The following code snippet exports PivotGrid data as a blob that is then saved to an XLSX file.
jQuery
DevExpress.excelExporter.exportPivotGrid({
component: pivotGridInstance,
worksheet: worksheet
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer) {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'Sales.xlsx');
});
});Angular
exportPivotGrid({
worksheet: worksheet,
component: pivotGridInstance
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer: BlobPart) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Sales.xlsx");
});
});Vue
exportPivotGrid({
worksheet: worksheet,
component: pivotGridInstance
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer: BlobPart) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Sales.xlsx");
});
});React
exportPivotGrid({
worksheet: worksheet,
component: pivotGridInstance
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer: BlobPart) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Sales.xlsx");
});
});Export to CSV
You can also export PivotGrid to CSV. To do this, call the exportPivotGrid(options) method as follows:
jQuery
$(function(){
const pivotGrid = $('#gridContainer').dxPivotGrid({
onExporting: function(e) {
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Employees');
DevExpress.excelExporter.exportPivotGrid({
component: e.component,
worksheet: worksheet
}).then(function() {
workbook.csv.writeBuffer().then(function(buffer) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Report.csv");
});
});
},
}).dxPivotGrid('instance');
});Angular
import { Component } from '@angular/core';
import { Workbook } from 'exceljs';
import { saveAs } from 'file-saver-es';
import { exportPivotGrid } from 'devextreme/excel_exporter';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
@ViewChild(DxPivotGridComponent, { static: false }) pivotGrid: DxPivotGridComponent;
onExporting: function(e) {
const workbook = new Workbook();
const worksheet = workbook.addWorksheet('Employees');
exportPivotGrid({
component: e.component,
worksheet: worksheet
}).then(function() {
workbook.csv.writeBuffer().then(function(buffer) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Report.csv");
});
});
}
}
<dx-pivot-grid ...
(onExporting)="onExporting($event)"
>
</dx-pivot-grid>Vue
<template>
<div>
<DxPivotGrid ...
@exporting="onExporting"
/>
</div>
</template>
<script setup lang="ts">
import 'devextreme/dist/css/dx.light.css';
import { DxPivotGrid, DxPivotGridTypes } from 'devextreme-vue/pivot-grid';
import { Workbook } from 'exceljs';
import { saveAs } from 'file-saver-es';
import { exportPivotGrid } from 'devextreme/excel_exporter';
function onExporting(e: DxPivotGridTypes.ExportingEvent) {
const workbook = new Workbook();
const worksheet = workbook.addWorksheet('Employees');
exportPivotGrid({
component: e.component,
worksheet: worksheet
}).then(function() {
workbook.csv.writeBuffer().then(function(buffer) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Report.csv");
});
});
}
</script>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import PivotGrid, { PivotGridTypes } from 'devextreme-react/pivot-grid';
import { Workbook } from 'exceljs';
import { saveAs } from 'file-saver-es';
import { exportPivotGrid } from 'devextreme/excel_exporter';
const onExporting = (e: PivotGridTypes.ExportingEvent) => {
const workbook = new Workbook();
const worksheet = workbook.addWorksheet('Employees');
exportPivotGrid({
component: e.component,
worksheet: worksheet
}).then(function() {
workbook.csv.writeBuffer().then(function(buffer) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Report.csv");
});
});
};
export default function App() {
return (
<PivotGrid ...
onExporting={onExporting}
/>
);
}Export Field Panel
PivotGrid does not export field panel headers. To enable their export, pass the following properties to exportPivotGrid:
Customize Cells
Use the customizeCell function inside the exportPivotGrid method to customize exported cells.
For instance, to outline (group) data in an Excel worksheet, define customizeCell as shown below:
jQuery
$(function() {
$("#pivotGridContainer").dxPivotGrid({
// ...
onExporting(e) {
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Companies');
DevExpress.excelExporter.exportPivotGrid({
component: e.component,
worksheet: worksheet,
topLeftCell: { row: 2, column: 2 },
customizeCell(e) {
if (e.pivotCell.area === 'row' && e.pivotCell.path?.length > 0) {
worksheet.getRow(e.pivotCell.rowIndex + 1).outlineLevel = e.pivotCell.path.length - 1;
}
}
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Companies.xlsx");
});
});
}
});
});Angular
import { Component } from '@angular/core';
import { exportPivotGrid } from 'devextreme/excel_exporter';
import { Workbook } from 'exceljs';
import saveAs from 'file-saver';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
onExporting(e) {
const workbook = new Workbook();
const worksheet = workbook.addWorksheet('Companies');
exportPivotGrid({
component: e.component,
worksheet: worksheet,
customizeCell(e) {
if (e.pivotCell.area === 'row' && e.pivotCell.path?.length > 0) {
worksheet.getRow(e.pivotCell.rowIndex + 1).outlineLevel = e.pivotCell.path.length - 1;
}
}
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer: BlobPart) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Companies.xlsx");
});
});
}
}
<dx-pivot-grid ...
(onExporting)="onExporting($event)">
</dx-pivot-grid>Vue
<template>
<DxPivotGrid ... @exporting="onExporting" />
</template>
<script setup lang="ts">
import 'devextreme/dist/css/dx.light.css';
import { DxPivotGrid, DxPivotGridTypes } from 'devextreme-vue/pivot-grid';
import { Workbook } from 'exceljs';
import { saveAs } from 'file-saver-es';
import { exportPivotGrid } from 'devextreme/excel_exporter';
function onExporting(e: DxPivotGridTypes.ExportingEvent) {
const workbook = new Workbook();
const worksheet = workbook.addWorksheet('Companies');
exportPivotGrid({
component: e.component,
worksheet: worksheet,
customizeCell(e) {
if (e.pivotCell.area === 'row' && e.pivotCell.path?.length > 0) {
worksheet.getRow(e.pivotCell.rowIndex + 1).outlineLevel = e.pivotCell.path.length - 1;
}
}
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer: BlobPart) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Companies.xlsx");
});
});
}
</script>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import PivotGrid, { PivotGridTypes } from 'devextreme-react/pivot-grid';
import { Workbook } from 'exceljs';
import { saveAs } from 'file-saver-es';
import { exportPivotGrid } from 'devextreme/excel_exporter';
const onExporting = (e: PivotGridTypes.ExportingEvent) => {
const workbook = new Workbook();
const worksheet = workbook.addWorksheet('Companies');
exportPivotGrid({
component: e.component,
worksheet: worksheet,
customizeCell(e) {
if (e.pivotCell.area === 'row' && e.pivotCell.path?.length > 0) {
worksheet.getRow(e.pivotCell.rowIndex + 1).outlineLevel = e.pivotCell.path.length - 1;
}
}
}).then(function() {
workbook.xlsx.writeBuffer().then(function(buffer: BlobPart) {
saveAs(new Blob([buffer], { type: "application/octet-stream" }), "Companies.xlsx");
});
});
};
export default function App() {
return (
<PivotGrid ...
onExporting={onExporting}
/>
);
}For another example of customizing your exported PivotGrid, see the following demo:
If you have technical questions, please create a support ticket in the DevExpress Support Center.