JSFiddle - React, Tailwind, and code Playground
JavaScript
/**
Get the contents of cell given column name and row number and sheet data range.
*/
function getCell(colName, row, data) {
data = data.getValues();
var col = data[0].indexOf(colName);
if (col != -1) {
return data[row-1][col];
}
}
/**
Sum all transactions across sheets that match category and date range.
@param category_name The category to filter on
@param date_min Minimum date in range to filter
@param date_max Maximum Date in range to filter
@param [time] Optional update time/date
@return The sum of transactions that match input criteria
@customfunction
*/
function sumCategory(category_name, date_min, date_max, time) {
//Browser.msgBox("sum_category( "+ category_name +" "+ date_min +" "+ date_max + " )" );
var date_min = new Date(date_min);
var date_max = new Date(date_max);
var date_month = date_min.getMonth();
var date_year = date_min.getYear();
var sheets = ['Account1', 'Account2'];
var column_name = {
Date: "Date",
Category: "Category",
Amount: "Amount"
};
var msg = "";
var sum = 0.0;
var spreadsheet = SpreadsheetApp.getActive();
// Number of seconds before the cache expires.
var cache_time = 120;
var cache = CacheService.getScriptCache();
// Build the cache key with requested category_year_month
var cache_key = category_name + '_' + date_year.toString() + '_' + date_month.toString();
// If we have this category cached, then return it...
var cached = cache.get(cache_key);
if (cached != null) {
return Number(cached);
}
// Category sum for cache
var cat_sum = { };
// Loop through all sheets, and all transactions building the category sum cache
for(var x = 0; x < sheets.length; x++){
var s = sheets[x];
//Browser.msgBox("Working on sheet: " + s);
var cur_sheet = spreadsheet.getSheetByName(s);
// Get data range for whole sheet
var data = cur_sheet.getDataRange();
var num_rows = data.getNumRows();
var...