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-selector
andexport-selector-onselect
components have been removed, in order to remove the dependency onember-select-list
, which hasn't been updated in a long time - The
csv
andexcel
services 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
excel
service supports merging cells via an additionalmerges
option - [v0.4.0] The
csv
service supports a newraw
option, which disables quoting and escaping of cell contents - [v0.5.0] The
csv
service supports a newautoQuote
option, 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});
}