0

我一直在遍尋搜索問題和示例,但似乎無法找到答案。我需要在標題行和列AQ:1到AV:1(AQ1:AV1)中設置這些公式。將setFormulas創建爲新的電子表格

["={"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),)))}"], 

我不斷收到此錯誤消息,我無法保存腳本。

Missing ] after element list. (line 138, file "Code")

我想我知道爲什麼,但我需要標題標題爲正確的文本,因爲我在其他函數中使用標題。

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

我錯過了什麼,或者我是否完全錯了,需要找到另一種方式來做到這一點。我還需要將公式添加到電子表格中的每個工作表,但我無法測試它是否可行。預先感謝您的任何幫助。

+0

這是不正確的在AQ2因爲這個公式添加公式在AQ1中是一個具有2行和1列的數組,除了第二行中的公式可以返回多行數組。 –

回答

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. 你似乎有一個額外的}在最後一個公式

結束試試這個,調整你的需求:

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

謝謝你我會試試看。我幾乎可以肯定這是雙引號。但是,如果沒有它們,該公式在電子表格中將無法使用。我會讓你知道結果。 – Thunderbog

+1

在OP函數中使用答案代碼返回'不正確的範圍高度,是7,但應該是2(第18行,文件「代碼」)'。 –

+0

感謝您的發現,Ruben。我現在會糾正我的回覆 –