Reputation: 5
Trying to come up with a Google App Script that replaces formula outputs with static values for previous weeks.
Here is Sample Google Sheet https://docs.google.com/spreadsheets/d/1GaqGBG4YcSihlP10weIr7tnGGgNSvf9XcftEoYeS4DY/edit#gid=0
Spreadsheet has 'Report' Sheet which is updated once a week (new data are overwritten) and cell B3 gets total number of cutomers from this report. 'Summary' Sheet, where row B29:BA29 are calendar weeks. Cell B5 - current CW number for report. Row B32:BA32 contains weekly data on number of customers that should be picked up from Report Sheet.
Since Report is always updating would like to hardcode formula results for past weeks.
Tried with loop and w/o it. Tried getValues, Logger, setValues. Also tried copyValuesToRange. Either nothing is replaced or all weeks get static values even future ones.
function freeze() {
var sss = SpreadsheetApp.openById('XXX').getSheetByName('Summary');
var cw = sss.getRange('B5').getValue;//current week
var weeks = sss.getRange('B29:BA29').getValues(); // all weeks
for (var i=0; i<weeks.length; i++) {
// alternatively tried this loop
// for (var i=0; i<weeks[0].length; i=i+1)
if (weeks < cw)
{ var dered = sss.getRange(32,2,1,27);
dered.copyValuesToRange(sss,2,27,32,32);
}}}
or another code
function freeze() {
var sss = SpreadsheetApp.openById('XXX');
var cw = sss.getSheetByName('Summary').getRange('B5').getValue;
var weeks = sss.getSheetByName('Summary').getRange('B29:BA29').getValues();
var dered = sss.getSheetByName('Summary').getRange('B32:BA32');
var deredvalues = dered.getValues();
if (weeks < cw) {
var deredsum = msred.setValues(deredvalues);
} }
or like this
function freeze() {
var sss = SpreadsheetApp.openById('XXX');
var cw = sss.getSheetByName('Summary').getRange('B5').getValue;
var weeks = sss.getSheetByName('Summary').getRange('B29:BA29').getValues();
var dered = sss.getSheetByName('Summary').getRange('B32:BA32');
if (weeks < cw) {
var deredvalues = dered.getValues();
Logger.log(deredvalues)
dered.setValues(deredvalues);
} }
Either nothing is replaced or all weeks get static values even future ones. Would be grateful for ideas.
Upvotes: 0
Views: 1105
Reputation: 26836
The procedure you should follow to implement your desired functionality:
Summary
, cell B5
which calendar week it isB2
and B3
from sheets Us Category1
and Category2
Summary
- in the column that corresponds to the current calendar weekThis is what it could look like, based on the script file bound to the spreadsheet you added in the comments:
function logUS() {
var ss = SpreadsheetApp.openById('1Vy1k_ejwxA4DJPqo_Pa0b5kXSkvE44MHRPR3lNF3wCw');
var country = "US";
var summary=ss.getSheetByName('Summary');
var cw = summary.getRange('B5').getValue();
var cat1 = ss.getSheetByName('US Category1').getRange('B2').getValue();
var cat1cancel = ss.getSheetByName('US Category1').getRange('B3').getValue();
var cat2 = ss.getSheetByName('US Category2').getRange('B2').getValue();
var cat2cancel = ss.getSheetByName('US Category2').getRange('B3').getValue();
var ts = ss.getSheetByName('CopyValues').appendRow([country+cw,cw,cat1,cat2,cat1cancel,cat2cancel]);
var columnNumbers=summary.getLastColumn()-1;
var weekRange=summary.getRange(31,2, 1, columnNumbers);
for(i=0;i<columnNumbers; i++)
{
if(summary.getRange(31,(2+i)).getValue()==cw)
{
summary.getRange(33,(2+i)).setValue(cat1);
summary.getRange(34,(2+i)).setValue(cat2);
summary.getRange(36,(2+i)).setValue(cat1cancel);
summary.getRange(37,(2+i)).setValue(cat2cancel);
}
}
}
Upvotes: 0