ExportToCSV
Export given array to csv file.
- Type
- javascript
- Pack
- CommonScripts
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.