Google脚本在单元格为黑色的1列中插入公式

时间:2018-06-28 06:01:41

标签: google-apps-script google-sheets

嗨,有人可以帮我这个脚本,我试图在从(J15)到(J38)的所有空白单元格中插入一个公式,这是我所得到的,但是我似乎无法以正确的方式获得任何帮助非常感谢。

 function test() {

   var ssA = SpreadsheetApp.getActive();    //changed from openById() for my convenience
   var ss = ssA.getActiveSheet();          //change from getSheetByName() for my convenience
   var range = ss.getRange(15,10,24,1);    //row 2 column 7 (G) lastRow 1 column 
   var data = range.getValues();           //Gets all data
 for(var i=0;i<data.length;i++)         //this runs over entire selected range 
  {  
   if(!data[i][0])                 //If true then it's blank
   {
  data[i](('=Iferror(If(G15="",, if($B$5 = Iferror(query(\'Client 
    List\'!$A$2:$A, "select A where A =\'"&$B$5&"\'"),""),VLOOKUP($B$5,Client_Rate,2,False),VLOOKUP(D15,Config_Rate_List 
 ,2,False))),"")');)
    }
   }
   range.setFormula(data);   //Sets all data.  

} 

1 个答案:

答案 0 :(得分:0)

您想将公式放入“ J15:J38”。如果我的理解是正确的,那么该修改如何?

我认为“ J15:J38”的单元格可能具有值和公式。因此,在此修改后的脚本中,将公式放入没有两个单元格的空单元格中。脚本的流程如下。

  1. 从“ J15:J38”中检索值和公式。
  2. 创建范围列表。
  3. 使用setFormula()输入公式。

我认为针对您的情况有几种解决方案。因此,请将此视为其中之一。

修改后的脚本:

function test() {
  var ssA = SpreadsheetApp.getActive();   //changed from openById() for my convenience
  var ss = ssA.getActiveSheet();          //change from getSheetByName() for my convenience
  var range = ss.getRange(15,10,24,1);    //row 2 column 7 (G) lastRow 1 column
  var data = range.getValues();           //Gets all data

  // The following script was modified.
  var formulas = range.getFormulas();
  var rangeList = [];
  var offset = 15;
  for(var i=0;i<data.length;i++) {
    if(!data[i][0] && !formulas[i][0]) {
      rangeList.push("J" + (offset + i));
    }
  }
  var formula = '=Iferror(If(G15="",, if($B$5 = Iferror(query(\'Client List\'!$A$2:$A, "select A where A =\'"&$B$5&"\'"),""),VLOOKUP($B$5,Client_Rate,2,False),VLOOKUP(D15,Config_Rate_List,2,False))),"")';
  ss.getRangeList(rangeList).setFormula(formula);
}

注意:

  • 由于脚本中的换行符,我不确定工作表名称是Client List还是ClientList
  • 我不确定放在单元格中的公式。
  • 关于您的标题,“ Google脚本在单元格为黑色的1列中插入公式的黑色”为“空白”?

参考:

如果这不是您想要的,对不起。

编辑:

不幸的是,还不能使用范围列表将数组中的公式放入单元格。我认为Sheets API可以一次放置各种公式。但是,作为一种简单的方法,我想在这里提出以下脚本。

function test() {
  var ssA = SpreadsheetApp.getActive();    //changed from openById() for my convenience
  var ss = ssA.getActiveSheet();          //change from getSheetByName() for my convenience
  var range = ss.getRange(15,10,24,1);    //row 2 column 7 (G) lastRow 1 column
  var data = range.getValues();           //Gets all data

  // The following script was modified.
  var formulas = range.getFormulas();
  var val = [];
  var offset = 15;
  for(var i=0;i<data.length;i++) {  
    if(!data[i][0] && !formulas[i][0]) {
      ss.getRange("J" + (offset + i)).setFormula('=Iferror(If(G' + (offset + i) + '="",, if($B$5 = Iferror(query(\'Client List\'!$A$2:$A, "select A where A =\'"&$B$5&"\'"),""),VLOOKUP($B$5,Client_Rate,2,False),VLOOKUP(D' + (offset + i) + ',Config_Rate_List,2,False))),"")');
    }
  }
}