尝试提出一个Google App脚本,该脚本将前几周的公式输出替换为静态值。
这是示例Google表格 https://docs.google.com/spreadsheets/d/1GaqGBG4YcSihlP10weIr7tnGGgNSvf9XcftEoYeS4DY/edit#gid=0
电子表格具有“报告”表,该表每周更新一次(新数据被覆盖),并且单元格B3从该报告中获取用户总数。 “摘要”表,其中B29:BA29行是日历周。 单元格B5-报告的当前CW号。 B32:BA32行包含每周应从报告表中提取的客户数量数据。
由于报表始终处于更新状态,因此希望对过去几周的公式结果进行硬编码。
尝试了循环并且没有循环。尝试使用getValues,Logger,setValues。还尝试了copyValuesToRange。要么什么都不会被替换,要么整周都将获得静态值,甚至将来的值也将变为静态值。
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);
}}}
或其他代码
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);
} }
或类似的
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);
} }
要么什么也不会被替换,要么整周都将获得静态值,甚至将来的值也将保持不变。会很感激的。
答案 0 :(得分:0)
实现所需功能应遵循的步骤:
Summary
,单元格B5
是哪个日历周B2
和B3
的单元格Us Category1
和Category2
中获取值Summary
-与当前日历周相对应的列中的相应行中这是基于绑定到您在注释中添加的电子表格的脚本文件的外观:
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);
}
}
}