创建时将setFormulas设置为新的电子表格

时间:2016-03-20 06:26:41

标签: google-apps-script google-sheets google-apps google-form

我一直在搜索问题和例子,但我似乎无法找到答案。我需要在标题行和列AQ:1到AV:1(AQ1:AV1)中设置这些公式。

["={"Hours:";ArrayFormula((IF(LEN(AE2:AE),((AF2:AF-AE2:AE)*24)+(((T2:T-S2:S)*24))+(((I2:I-H2:H)*24)),)))}",
"={"Rest Hours:";ArrayFormula((IF(LEN(AE2:AE),((M2:M)*24)+(((X2:X)*24))+(((AJ2:AJ)*24)),)))}",
"={"Rest Hours Wages:";ArrayFormula((IF(LEN(AE2:AE),(AI2:AI*(AJ2:AJ*24)+(L2:L*(M2:M*24)+(W2:W*(X2:X*24)))),)))}",
"={"Hours-RestHours:";ArrayFormula((IF(LEN(AE2:AE),((AQ2:AQ-AR2:AR)),)))}",
"={"Rate:";ArrayFormula((IF(LEN(AE2:AE),((E2:E+P2:P+AB2:AB)),)))}"],

我需要把它放到AQ列(AQ2)的第二行。

["=ArrayFormula((IF(LEN(AE2:AE),((AT2:AT*AU2:AU)+AS2:AS),)))}"],

我一直收到此错误消息,但无法保存脚本。

  元素列表后

缺少]。 (第138行,文件"代码")

我想我知道为什么但是我需要标题用正确的文本标题,因为我在其他函数中使用标题。

function setFormulas(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

// This sets the formulas to be a row of sums, followed by a row of averages right below.
// The size of the two-dimensional array must match the size of the range.
var formulas = [
  ["={"Hours:";ArrayFormula((IF(LEN(AE2:AE),((AF2:AF-AE2:AE)*24)+(((T2:T-S2:S)*24))+(((I2:I-H2:H)*24)),)))}",
  "={"Rest Hours:";ArrayFormula((IF(LEN(AE2:AE),((M2:M)*24)+(((X2:X)*24))+(((AJ2:AJ)*24)),)))}",
  "={"Rest Hours Wages:";ArrayFormula((IF(LEN(AE2:AE),(AI2:AI*(AJ2:AJ*24)+(L2:L*(M2:M*24)+(W2:W*(X2:X*24)))),)))}",
  "={"Hours-RestHours:";ArrayFormula((IF(LEN(AE2:AE),((AQ2:AQ-AR2:AR)),)))}",
  "={"Rate:";ArrayFormula((IF(LEN(AE2:AE),((E2:E+P2:P+AB2:AB)),)))}",
  "={"Wages:";ArrayFormula((IF(LEN(AE2:AE),((AT2:AT*AU2:AU)+AS2:AS),)))}"],
  ["=ArrayFormula((IF(LEN(AE2:AE),((AT2:AT*AU2:AU)+AS2:AS),)))}"],
 ];

var cell = sheet.getRange("AQ1:AW2");
 cell.setFormulas(formulas);
}

我是否遗漏了某些东西,或者我是否完全错误,需要找到另一种方法。我还需要将公式添加到电子表格中的每个工作表,但我无法测试它是否有效。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

UPD:

似乎双引号在这里干扰。为避免这种情况,您可以在公式中使用单引号括号和双引号,如下所示:

'={"Hours:";ArrayFormula((IF(LEN(AE2:AE),((AF2:AF-AE2:AE)*24)+(((T2:T-S2:S)*24))+(((I2:I-H2:H)*24)),)))}'

如评论中所述:

  1. 阵列会扩展,因此您可能需要在一行中设置公式,例如AQ1:AW1
  2. 此外,如果AQ:AU列中的源数据(通过公式的外观),在相同列中设置数组公式很可能会返回错误:Array result was not expanded because it would overwrite data in AQ18
  3. 您似乎在最后一个公式
  4. 的末尾有一个额外的}

    尝试此操作并根据您的需求进行调整:

    function setFormulas(){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheets()[0];
    
    // This sets the formulas to be a row of sums, followed by a row of averages right below.
    // The size of the two-dimensional array must match the size of the range.
    var formulas = [
      ['={"Hours:";ArrayFormula((IF(LEN(AE2:AE),((AF2:AF-AE2:AE)*24)+(((T2:T-S2:S)*24))+(((I2:I-H2:H)*24)),)))}',
      '={"Rest Hours:";ArrayFormula((IF(LEN(AE2:AE),((M2:M)*24)+(((X2:X)*24))+(((AJ2:AJ)*24)),)))}',
      '={"Rest Hours Wages:";ArrayFormula((IF(LEN(AE2:AE),(AI2:AI*(AJ2:AJ*24)+(L2:L*(M2:M*24)+(W2:W*(X2:X*24)))),)))}',
      '={"Hours-RestHours:";ArrayFormula((IF(LEN(AE2:AE),((AQ2:AQ-AR2:AR)),)))}',
      '={"Rate:";ArrayFormula((IF(LEN(AE2:AE),((E2:E+P2:P+AB2:AB)),)))}',
      '={"Wages:";ArrayFormula((IF(LEN(AE2:AE),((AT2:AT*AU2:AU)+AS2:AS),)))}',
      '=ArrayFormula((IF(LEN(AE2:AE),((AT2:AT*AU2:AU)+AS2:AS),)))']
     ];
    
    var cell = sheet.getRange("AW1:BC1");
     cell.setFormulas(formulas);
    }