【问题标题】:setFormulas to a new spreadsheets when created创建时将公式设置为新的电子表格
【发布时间】:2016-03-20 06:26:40
【问题描述】:

我一直在到处寻找问题和示例,但似乎找不到答案。我需要在标题行和列 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);
}

我是遗漏了什么,还是我做错了,需要找到另一种方法来做到这一点。我还需要将公式添加到电子表格中的每张纸上,但我无法测试它是否有效。提前感谢您的帮助。

【问题讨论】:

  • 在AQ2中添加公式是不正确的,因为AQ1中的公式是一个2行1列的数组,而且第二行的公式可以返回多行的数组。跨度>

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


【解决方案1】:

更新:

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

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

如cmets中所述:

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

试试这个并根据您的需要进行调整:

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);
}

【讨论】:

  • 谢谢,我会试试的。我几乎可以肯定它是双引号。但是,如果没有它们在电子表格中,公式将无法工作。我会让你知道结果。
  • 使用 OP 函数中的答案代码返回 Incorrect range height, was 7 but should be 2 (line 18, file "Code")
  • 感谢您发现它,鲁本。我现在会更正我的回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多