Custom function for translating model fields over to a form usable by SheetJS’s XLSX.utils.aoa_to_sheet function
skuid.custom.sheetJSData = function (d, options) {
if(d===undefined || d.length === 0){
return undefined;
}
let retArr = ;
let usingFields = false;
if(options !== undefined && options.fields !== undefined){
usingFields=true;
}
let fieldsToSkip = {};
fieldsToSkip[‘skuid_record’] = true;
fieldsToSkip[‘Id’] = true;
if(options !== undefined && options.includeId === true){
fieldsToSkip[‘Id’] = false;
}
//construct first row
let firstRow = ;
if(!usingFields){
for (const [key, value] of Object.entries(d[0])) {
if(fieldsToSkip[key] === true){
continue;
}
firstRow.push(key);
}
}
else{
for (let i=0; i < options.fields.length; i++){
let field = options.fields[i];
let fieldName = field.id;
if(field.name !== undefined){
fieldName = field.name;
}
firstRow.push(fieldName);
}
}
retArr.push(firstRow);
for(let i=0; i < d.length; i++){
let o = d[i];
let thisRow = ;
if(!usingFields){
for (const [key, value] of Object.entries(o)) {
if(fieldsToSkip[key] === true){
continue;
}
thisRow.push(value);
}
}
else{
for (let j=0; j < options.fields.length; j++){
let fieldId = options.fields[j].id;
thisRow.push(o[fieldId]);
}
}
retArr.push(thisRow);
}
return retArr;
};
Example usage in a snippet:
var params = arguments[0], $ = skuid.$;
// use specific fields on the model for export
let fieldsToUse = ;
fieldsToUse.push({id:‘Field1’});
fieldsToUse.push({id:‘Field2’});
// will use field ID as the column header by default, override this using “name”
fieldsToUse.push({id:‘Field3’,name:‘Field3Label’});
let fn = ‘FileNameToUse’;
// make sure this is a valid file name
fn = fn.replace(/[ &/\#,+()$~%.'":*?<>{}]/g, “”);
//create a workbook
var wb = XLSX.utils.book_new();
//create a worksheet
//use our skuid.sheetJSData to translate model.data to a proper export using specific fields
var ws = XLSX.utils.aoa_to_sheet(skuid.custom.sheetJSData(skuid.$M(‘MyModel’).data,{fields: fieldsToUse}));
//append the worksheet
XLSX.utils.book_append_sheet(wb, ws, fn.substring(0,30));
//export
XLSX.writeFile(wb, fn+‘.xlsx’);