2017-09-01 64 views
1

在谷歌片,我得到這個代碼編輯單元中的「公式語法錯誤」:谷歌腳本.setFormula()只用明確的字符串工作

var A1one = 'C4'; 
var A1two = 'B4'; 
var A1three = 'B4'; 
var wholeFormula = '=if(today()<D$1,,' + A1one + '+if(isNumber(' + A1two + '),' + A1three + ',0)'; 
var wholeFormulaA1 = '=if(today()<D$1,,C4+if(isNumber(B4),B4,0))'; 
trackCell1.setFormula(wholeFormula); 

但是,如果我改變代碼如下它的工作原理細(唯一的變化是在最後一行):

var A1one = 'C4'; 
var A1two = 'B4'; 
var A1three = 'B4'; 
var wholeFormula = '=if(today()<D$1,,' + A1one + '+if(isNumber(' + A1two + '),' + A1three + ',0)'; 
var wholeFormulaA1 = '=if(today()<D$1,,C4+if(isNumber(B4),B4,0))'; 
trackCell1.setFormula(wholeFormulaA1); 

wholeFormulawholeFormulaA1應該是相同的。爲什麼Google表格會以不同的方式對待它們?

我認爲這是某種重新計算錯誤。如果我運行上面的第一個代碼示例,並且單元格顯示#ERROR!,我可以通過雙擊該單元格並在鍵盤上按ENTER來修復它。這迫使工作表重新計算(我猜?),公式的正確結果顯示在單元格中。

但是,如何讓Google表格在使用第一個代碼示例時自動更新單元格?

回答

0

我猜你在最後錯過),嘗試:

var try = '=if(today()<D$1,,' + A1one + '+if(isNumber(' + A1two + '),' + A1three + ',0))';


要強制腳本重新計算公式,使用SpreadsheetApp.flush();

我可以通過雙擊修復單元格並敲擊 鍵盤上的ENTER。這迫使工作表重新計算(我猜?),公式的正確結果顯示在單元格中。

我認爲當您重新手動輸入配方時,它會檢查是否錯過)並自動修復此問題。當您通過腳本輸入公式時,不會發生這種情況。

+0

那是男人,謝謝。很高興這很簡單。 :-) – user2179367