Web Components Hierarchical Grid Export to Excel Service
The Ignite UI for Web Components Export to Excel Service in Web Components Hierarchical Grid can export data to excel. The data export functionality is encapsulated in the ExcelExporterService
class and the data is exported in MS Excel table format. This format allows features like filtering, sorting, etc. To do this you need to invoke the Export
method of ExcelExporterService
and pass the IgcHierarchicalGridComponent
component as first argument to export grid easily.
Web Components Excel Exporter Example
import 'igniteui-webcomponents-grids/grids/combined';
import { IgcHierarchicalGridComponent } from 'igniteui-webcomponents-grids/grids';
import SingersExportData from './SingersExportData.json';
import "igniteui-webcomponents-grids/grids/themes/light/bootstrap.css";
import "./index.css";
export class Sample {
private hierarchicalGrid1: IgcHierarchicalGridComponent
private _bind: () => void;
constructor() {
var hierarchicalGrid1 = this.hierarchicalGrid1 = document.getElementById('hierarchicalGrid1') as IgcHierarchicalGridComponent;
this._bind = () => {
hierarchicalGrid1.data = this.singersExportData;
}
this._bind();
}
private _singersExportData: any[] = SingersExportData;
public get singersExportData(): any[] {
return this._singersExportData;
}
}
new Sample();
ts<!DOCTYPE html>
<html>
<head>
<title>Sample | Ignite UI | Web Components | infragistics</title>
<meta charset="UTF-8" />
<link rel="shortcut icon" href="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel="stylesheet" href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" />
<link rel="stylesheet" href="/src/index.css" type="text/css" />
</head>
<body>
<div id="root">
<div class="container sample ig-typography">
<div class="container fill">
<igc-hierarchical-grid
auto-generate="false"
primary-key="ID"
allow-filtering="true"
filter-mode="excelStyleFilter"
name="hierarchicalGrid1"
id="hierarchicalGrid1">
<igc-grid-toolbar
>
<igc-grid-toolbar-actions
>
<igc-grid-toolbar-exporter
export-csv="false"
export-excel="true">
</igc-grid-toolbar-exporter>
</igc-grid-toolbar-actions>
</igc-grid-toolbar>
<igc-column
field="Artist"
header="Artist"
data-type="string"
sortable="true">
</igc-column>
<igc-column
field="Debut"
header="Debut"
data-type="number">
</igc-column>
<igc-column
field="GrammyNominations"
header="Grammy Nominations"
data-type="number"
sortable="true">
</igc-column>
<igc-column
field="GrammyAwards"
header="Grammy Awards"
data-type="number"
sortable="true">
</igc-column>
<igc-row-island
child-data-key="Albums"
auto-generate="false">
<igc-column
field="Album"
header="Album"
data-type="string">
</igc-column>
<igc-column
field="LaunchDate"
header="Launch Date"
data-type="date">
</igc-column>
<igc-column
field="BillboardReview"
header="Billboard Review"
data-type="string">
</igc-column>
<igc-column
field="USBillboard200"
header="US Billboard 200"
data-type="string">
</igc-column>
<igc-row-island
child-data-key="Songs"
auto-generate="false">
<igc-column
field="Number"
header="No."
data-type="string">
</igc-column>
<igc-column
field="Title"
header="Title"
data-type="string">
</igc-column>
<igc-column
field="Released"
header="Released"
data-type="date">
</igc-column>
<igc-column
field="Genre"
header="Genre"
data-type="string">
</igc-column>
</igc-row-island>
</igc-row-island>
<igc-row-island
child-data-key="Tours"
auto-generate="false">
<igc-column
field="Tour"
header="Tour"
data-type="string">
</igc-column>
<igc-column
field="StartedOn"
header="Started on"
data-type="string">
</igc-column>
<igc-column
field="Location"
header="Location"
data-type="string">
</igc-column>
<igc-column
field="Headliner"
header="Headliner"
data-type="string">
</igc-column>
<igc-row-island
child-data-key="TourData"
auto-generate="false">
<igc-column
field="Country"
header="Country"
data-type="string">
</igc-column>
<igc-column
field="TicketsSold"
header="Tickets Sold"
data-type="number">
</igc-column>
<igc-column
field="Attendants"
header="Attendants"
data-type="number">
</igc-column>
</igc-row-island>
</igc-row-island>
</igc-hierarchical-grid>
</div>
</div>
</div>
<!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><script src="src/index.ts"></script><% } %>
</body>
</html>
html/* shared styles are loaded from: */
/* https://static.infragistics.com/xplatform/css/samples */
css
Like this sample? Get access to our complete Ignite UI for Web Components toolkit and start building your own apps in minutes. Download it for free.
Export Multi Column Headers Grid
It is now possible to export IgcHierarchicalGridComponent
with defined multi-column headers. All headers will be reflected in the exported excel file as they are displayed in the IgcHierarchicalGridComponent
. If you want to exclude the defined multi-column headers from the exported data you can set the ExporterOption
IgnoreMultiColumnHeaders
to true
.
The exported IgcHierarchicalGridComponent will not be formatted as a table, since Excel tables do not support multiple column headers.
import 'igniteui-webcomponents-grids/grids/combined';
import { IgcHierarchicalGridComponent, IgcGridToolbarExporterComponent } from 'igniteui-webcomponents-grids/grids';
import MultiColumnsExportData from './MultiColumnsExportData.json';
import { IgcExporterEventArgs } from 'igniteui-webcomponents-grids/grids';
import "igniteui-webcomponents-grids/grids/themes/light/bootstrap.css";
import "./index.css";
export class Sample {
private hierarchicalGrid1: IgcHierarchicalGridComponent
private hGridToolbarExporter: IgcGridToolbarExporterComponent
private _bind: () => void;
constructor() {
var hierarchicalGrid1 = this.hierarchicalGrid1 = document.getElementById('hierarchicalGrid1') as IgcHierarchicalGridComponent;
var hGridToolbarExporter = this.hGridToolbarExporter = document.getElementById('hGridToolbarExporter') as IgcGridToolbarExporterComponent;
this.webHierarchicalGridExportMultiColumnHeaders = this.webHierarchicalGridExportMultiColumnHeaders.bind(this);
this._bind = () => {
hierarchicalGrid1.data = this.multiColumnsExportData;
hGridToolbarExporter.addEventListener("exportStarted", this.webHierarchicalGridExportMultiColumnHeaders);
}
this._bind();
}
private _multiColumnsExportData: any[] = MultiColumnsExportData;
public get multiColumnsExportData(): any[] {
return this._multiColumnsExportData;
}
public webHierarchicalGridExportMultiColumnHeaders(args: CustomEvent<IgcExporterEventArgs>): void {
if (args.detail.options) {
args.detail.options.ignoreMultiColumnHeaders = false;
}
}
}
new Sample();
ts<!DOCTYPE html>
<html>
<head>
<title>Sample | Ignite UI | Web Components | infragistics</title>
<meta charset="UTF-8" />
<link rel="shortcut icon" href="https://static.infragistics.com/xplatform/images/browsers/wc.png" >
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Kanit&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Titillium Web" />
<link rel="stylesheet" href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" />
<link rel="stylesheet" href="/src/index.css" type="text/css" />
</head>
<body>
<div id="root">
<div class="container sample ig-typography">
<div class="container fill">
<igc-hierarchical-grid
auto-generate="false"
primary-key="ID"
moving="true"
allow-filtering="true"
name="hierarchicalGrid1"
id="hierarchicalGrid1">
<igc-grid-toolbar
>
<igc-grid-toolbar-actions
>
<igc-grid-toolbar-exporter
export-csv="false"
export-excel="true"
name="hGridToolbarExporter"
id="hGridToolbarExporter">
</igc-grid-toolbar-exporter>
</igc-grid-toolbar-actions>
</igc-grid-toolbar>
<igc-column-group
header="General Information">
<igc-column
field="Company"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column-group
header="Personal Details">
<igc-column
field="ContactName"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="ContactTitle"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
</igc-column-group>
<igc-column-group
header="Address Information">
<igc-column-group
header="Location">
<igc-column
field="Address"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="City"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="PostalCode"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="Country"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
<igc-column-group
header="Contact Information">
<igc-column
field="Phone"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="Fax"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
</igc-column-group>
<igc-row-island
child-data-key="ChildCompanies"
auto-generate="false"
moving="true">
<igc-column-group
header="General Information">
<igc-column
field="Company"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column-group
header="Personal Details">
<igc-column
field="ContactName"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="ContactTitle"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
</igc-column-group>
<igc-column-group
header="Address Information">
<igc-column-group
header="Location">
<igc-column
field="Address"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="City"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="PostalCode"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="Country"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
<igc-column-group
header="Contact Information">
<igc-column
field="Phone"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="Fax"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
</igc-column-group>
<igc-row-island
child-data-key="ChildCompanies"
auto-generate="false"
moving="true">
<igc-column-group
header="General Information">
<igc-column
field="Company"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column-group
header="Personal Details">
<igc-column
field="ContactName"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="ContactTitle"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
</igc-column-group>
<igc-column-group
header="Address Information">
<igc-column-group
header="Location">
<igc-column
field="Address"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="City"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="PostalCode"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="Country"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
<igc-column-group
header="Contact Information">
<igc-column
field="Phone"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
<igc-column
field="Fax"
data-type="string"
sortable="true"
resizable="true">
</igc-column>
</igc-column-group>
</igc-column-group>
</igc-row-island>
</igc-row-island>
</igc-hierarchical-grid>
</div>
</div>
</div>
<!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><script src="src/index.ts"></script><% } %>
</body>
</html>
html/* shared styles are loaded from: */
/* https://static.infragistics.com/xplatform/css/samples */
css
Export Grid with Frozen Column Headers
By default Excel Exporter service exports the grid with scrollable (unfrozen) column headers. There are scenarios in which you may want to freeze all headers on top of the exported excel file so they always stay in view as the user scrolls through the records. To achieve this you could set the ExporterOption
FreezeHeaders
to true
.
constructor() {
var hGridToolbarExporter = document.getElementById('hGridToolbarExporter') as IgcGridToolbarExporterComponent;
hGridToolbarExporter.addEventListener("exportStarted", this.webGridExportEventFreezeHeaders);
}
public webGridExportEventFreezeHeaders(args: CustomEvent<IgcExporterEvent>): void {
args.detail.options.freezeHeaders = true;
}
ts
Known Limitations
Limitation | Description |
---|---|
Hierarchy levels | The excel exporter service can create up to 8 levels of hierarchy. |
Max worksheet size | The maximum worksheet size supported by Excel is 1,048,576 rows by 16,384 columns. |
Exporting pinned columns | In the exported Excel file, the pinned columns will not be frozen but will be displayed in the same order as they appear in the grid. |
API References
ExcelExporterService
ExcelExporterOptions
IgcHierarchicalGridComponent
Additional Resources
Our community is active and always welcoming to new ideas.