Source
function valueToValidString(value) { if (typeof value === 'number' || typeof value === 'boolean' ) { value = value.toString(); } else if (typeof value === 'object') { value = JSON.stringify(value); } value = value.trim().replace(/\n/g, '\\n').replace(/"/g, '""'); if (value && (value.includes(',') || value.includes('\r') || value.includes('\n'))) { value = '"' + value + '"'; } return value; } function extractHeaders(objArray) { var headersInOrder = []; var headers = {}; for(var i = 0; i < objArray.length; i++){ var objHeaders = Object.keys(objArray[i]); for(var j = 0; j < objHeaders.length; j++){ header = objHeaders[j]; if (!headers.hasOwnProperty(objHeaders[j])) { headersInOrder.push(objHeaders[j]); // maintain a map to enable quick check if the header was added before headers[header] = ''; } } } return headersInOrder; } function convertToCSV(objArray, headers) { // if objArray is an array of strings then return a single line of values if (typeof objArray[0] !== 'object') { // add headrs line if (headers && headers.length >= objArray.length){ headers = headers.slice(0, objArray.length); return headers.join() + '\n' + objArray.join(); } return objArray.join(); } // create file headers if (!headers) { headers = extractHeaders(objArray); } // collect values into rows var rows = []; for(var i = 0; i < objArray.length; i++){ obj = objArray[i]; if (typeof obj !== 'object') { throw "Array contains '" + typeof obj + "' member: '" + obj + "'" ; } var row = []; // loop on headersInOrder to extract values from the object and add to 'row' to match headers order. for(var j = 0; j < headers.length; j++){ header = headers[j]; var value = ''; if (obj.hasOwnProperty(header)) { value = valueToValidString(obj[header]); } row.push(value); } rows.push(row); } // create file content var fileContent = headers.join(); for (var i = 0; i < rows.length; i++) { var line = rows[i].join(); fileContent += '\n' + line ; } return fileContent; } // string was passed as input if (typeof args.csvArray === 'string') { // add array brackets if missing from string args.csvArray = args.csvArray[0] == '[' ? args.csvArray : '[' + args.csvArray + ']' // try to parse string to json try { args.csvArray = JSON.parse(args.csvArray); } catch (err) { return { Type: entryTypes.error, ContentFormat: formats.text, Contents: 'The csvArray that was passed was not array!' }; } } // json object passed as input if (!Array.isArray(args.csvArray)) { //wrap in an array args.csvArray = [args.csvArray]; } if (args.headers && !Array.isArray(args.headers)){ args.headers = args.headers.split(','); } var csvString = convertToCSV(args.csvArray, args.headers); if (args.codec === 'UTF-16-BOM') { var utf16Bom = '\uFEFF'; csvString = utf16Bom + csvString; } var createdFileID = saveFile(csvString); return { Type: 3, FileID: createdFileID, File: args.fileName, Contents: args.fileName };
README
Export given array to csv file
Script Data
| Name | Description |
|---|---|
| Script Type | javascript |
| Tags | Utility, csv |
Inputs
| Argument Name | Description |
|---|---|
| fileName | output filename |
| csvArray | Array to export |
| headers | Array to hold the file headers in order. Also excepts a comma separated list. |
| codec | UTF-16-BOM to encode Non English characters. Default is: UTF-8 |
Outputs
There are no outputs for this script.