google App脚本-如果满足条件,则用静态值替换公式

时间:2019-06-14 13:57:30

标签: for-loop if-statement google-apps-script

尝试提出一个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);

  } }

要么什么也不会被替换,要么整周都将获得静态值,甚至将来的值也将保持不变。会很感激的。

1 个答案:

答案 0 :(得分:0)

实现所需功能应遵循的步骤:

  1. 签入工作表Summary,单元格B5是哪个日历周
  2. 找到分配给各个日历周的列
  3. 从工作表B2B3的单元格Us Category1Category2中获取值
  4. 将值粘贴在工作表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);
      }   
   } 
}