Parse any spreadsheet range into a table for GitHub, Obsidian, etc.
Expects a header row.
/* Google Apps Script */
/**
* Select any spreadsheet range, and return a string-parsed table for GitHub, Obsidian, etc.
* Note: Obsidian requires a prefixed empty space for the header row, if the first cell is blank.
* @param {Array<Array>} array2d - The source range.
* @customfunction
*/
function GetParsedTable(array2d) {
var header = ParseHeader(GetHeader(array2d));
var subheader = ParseSubHeader(GetSubHeader(array2d));
var data = ParseData(GetData(array2d));
return JoinStrings('\n', header, subheader, data);
}
function ParseHeader(array2d) {
var prefix = array2d[0][0] === "" ? "|" : "";
return prefix + Join2dArray([array2d[0]]);
}
function ParseSubHeader(array2d) {
return Join2dArray(array2d);
}
function ParseData(array2d) {
return Join2dArray(array2d);
}
function GetHeader(array2d) {
if (array2d.length === 0) {
return [[]];
}
else {
return [array2d[0]];
}
}
function GetSubHeader(array2d) {
var columns = array2d[0].length;
var newArray2d = new Array(1);
newArray2d[0] = new Array(columns);
newArray2d[0].fill('-');
return newArray2d;
}
function GetData(array2d) {
if (array2d.length <= 1) {
return [[]];
}
else {
return array2d.slice(1);
}
}
function Join2dArray(array2d) {
return array2d.map(row => row.join('|')).join('\n');
}
function JoinStrings(separator, ...args) {
return args.join(separator);
}