Addon that encapsulates ability to render a data set as either excel or csv.
Forked from roofstock/ember-cli-data-export.
- Dependencies have been updated to address various deprecations
- The undocumented
export-selectorandexport-selector-onselectcomponents have been removed, in order to remove the dependency onember-select-list, which hasn't been updated in a long time - The
csvandexcelservices are not automatically injected - The dummy app now has content (a couple of buttons to generate demo files)
- Multiple sheets can be added to a single XLSX file
- [v0.3.0] The
excelservice supports merging cells via an additionalmergesoption - [v0.4.0] The
csvservice supports a newrawoption, which disables quoting and escaping of cell contents - [v0.5.0] The
csvservice supports a newautoQuoteoption, which only quotes/escapes cells which need it (those containing quotes, commas or newlines).
- ember install ember-spreadsheet-export
- uses js-xlsx library for rendering excel content.
- automatically injects a service for both excel and csv format
- feed a datastructure that's an array of arrays, where each internal array is the set of data to be rendered for that row.
- Example: [['Title 1', 'Title 2', 'Title 3'],['row1cell1', 'row1cell2', 'row1cell3'],['row2cell1', 'row2cell2', 'row2cell3']]
In order to merge cells, an array of merges can be passed in the options hash.
Each element of this array should be an object taking the following form:
{
s: {
r: 0,
c: 0,
},
e: {
r: 1,
c: 0,
},
}s defines the start of the range to be merged, and e the end of the range.
Within each, r is the row index and c is the column index.
The example above would therefore merge the first two cells in the first column.
// Don't forget to inject the service(s) as needed
csv: service(),
excel: service(),
// Then go ahead and use it in your code
let data = [
['Title 1', 'Title 2', 'Title 3'],
['row1cell1', 'row1cell2', 'row1cell3'],
['row2cell1', 'row2cell2', 'row2cell3']
];
if (type === 'MultiExcel') {
let sheets = [
{
name: 'Demo sheet',
data
},
{
name: 'Supplemental sheet',
data: [
['Foo', 'Bar'],
['Baz', 'Foobar']
]
}
];
this.excel.export(sheets, {multiSheet: true, fileName: 'test.xlsx'});
} else if (type === 'Excel') {
this.excel.export(data, {sheetName: 'sheet1', fileName: 'test.xlsx'});
} else if (type === 'CSV') {
this.csv.export(data, {fileName: 'test.csv', autoQuote: true});
}