2013-10-02 66 views
3

我正在嘗試在Google Spreadsheets中創建函數時如何工作If語句。在Google電子表格中使用If語句

我提供了一個我想要實現的例子。就我所知,這段代碼中的If語句只是檢查單元格A4的值是否等於4,如果是,則它將輸入數字乘以1.5?但是,當我嘗試運行該函數時,它總是返回0(或者我分配價格變量開始的任何值)。

任何幫助將不勝感激。

非常感謝

function calculatePrice(inNum) { 

     var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
     var price = 0; 

     if (sheet.getRange(1, 4).getValue() == 4) { 
      price = inNum * 1.5; 
     } 

     return price; 
    } 
+0

你是如何運作的功能? –

回答

1

在這裏你去。 您錯過了getDataRange,之後您可以獲取單元格。的spreadsheet

+0

爲什麼你認爲'getDataRange'是必需的? ['getRange'](https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange(Integer,Integer))看起來很好。 –

+0

使用getDataRange我正在獲取單元格的所有範圍。我包含一個演示來演示它是如何工作的 – Diego

+0

我得到的代碼與OP的代碼完全相同,結果如下:它似乎首先工作,但函數結果被緩存或某事,因爲隨後它不會不更新 - 如果我更改A1,而不是如果我使用該函數刪除單元格並再次鍵入它。我發現好奇的是,OP將此標記爲「已接受」,但希望它對他們有效。 –

1

function calculatePrice(inNum) { 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var price = 0; 
if (sheet.getDataRange().getCell(row, col).getValue() == 4) { 
    price = inNum * 1.5; 
} 
return price; 
} 

演示作爲T.J.Crowder發現,公認的答案有一個關鍵的弱點。自定義函數依賴於A4中的值,但該值在更改時不會自動更新。

爲什麼?作爲優化步驟,表格只會刷新它確定受編輯影響的單元格。但是,它不分析自定義函數的內部,而是依賴電子表格公式中的範圍引用參數。

如果你的函數的變化做出反應A4,這將是更好地實現它接受importantFactor作爲參數,正是如此它是重要的:

function calculatePrice(importantFactor,inNum) { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var price = 0; 
    if (importantFactor == 4) { 
    price = inNum * 1.5; 
    } 
    return price; 
} 

像這樣被使用,假定inNum被在G6值:

=calculatePrice($A$4,G6) 

更重要的是,你可以不用腳本實現這一點:

=IF($A$4=4, G6 * 1.5, 0) 

無論哪種方式,更改A4的內容都會觸發重新計算包含公式的單元格。