2017-02-13 3 views
1

Я написал функцию, которая имеет один параметр - updateBool. Функция получает существующее значение вызывающей ячейки. Если updatebool да, случайное число генерируется и возвращается как новое значение вызывающей ячейки. Если updateBool нет (т. Е. Не требуется обновление), тогда он возвращает исходное значение ячейки.Возвращение числа через функцию

Функция выполняется правильно, когда updateBool есть. Однако, когда это не так, возвращается результат: «Ошибка: результат не был числом».

Я изменил функцию, поэтому я могу запустить ее в режиме отладки - кажется, что она выполнена правильно в этом режиме, как да, так и нет, поскольку параметры работают. Но как только я прохожу через updateBool в качестве параметра (посредством ссылки на другую ячейку), это ошибки.

function testFunction() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var writeSheet = ss.getSheetByName('Data'); 

    //for debug execution only 
    var callingRow = 4; 
    var callingColumn = '4'; 
    updateBool = 'no' 

    //for when calling as function from spreadsheet 
    //callingRow = writeSheet.getActiveCell().getRow(); 
    //callingColumn = writeSheet.getActiveCell().getColumn(); 

    var callingCellRef = writeSheet.getRange(callingRow, callingColumn) 
    callingCellValue = Number(callingCellRef.getValue()); 

    Logger.log('Calling Cell row: %s column: %s', callingRow, callingColumn); 
    Logger.log('Calling Cell Value: %s', callingCellValue); 

    if (updateBool == 'no') { 
    //DONT do any updates 
    Logger.log('UpdateBool is no, no update'); 
    return callingCellValue; 
    } 
    else { 
    // do updates 
    var randomVariable = Math.random(); 
    Logger.log('UpdateBool is yes, update to: %s', randomVariable); 
    return randomVariable; 
    } 
} 

Фактическое использование случай является более сложным, чем это (я прохожу через несколько параметров и с использованием тех запросов к базе данных), но это логика, что я не могу работать. Благодаря!

+0

Функция определение должно быть 'функция функции теста (updateBool) {', верно? И скажем, что 'a1'' 7.77'. И тогда, когда вы устанавливаете 'a1' to' = testFunction («something») ',' a1' больше не '7.77', а становится формулой (' string'). Поэтому в функции, поскольку 'a1' является строкой, ее нельзя преобразовать в число. –

+0

Я предлагаю вам отделить данные от результатов обновления. –

+0

Не могли бы вы поделиться кодом, как вы получаете значение updateBool? Функция работает правильно, когда значение «да», потому что это логика по умолчанию в вашей функции. Я считаю, что проблема заключается в том, как/какое значение вы передаете в updateBool, то есть вы не ссылаетесь на ячейку, которую вы считаете собой, или на то, как вы получаете это значение. (Лучше всего предположить, что я могу придумать ограниченный код, я тоже мог бы ошибиться в своих предположениях :)) –

ответ

1

Это, кажется, работает просто отлично:

function testFunction() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var writeSheet = ss.getSheetByName('Sheet1'); 

    //for debug execution only 
    var callingRow = 4; 
    var callingColumn = '4'; 
    var updateBool = 'yes'; 


    //for when calling as function from spreadsheet 
    //callingRow = writeSheet.getActiveCell().getRow(); 
    //callingColumn = writeSheet.getActiveCell().getColumn(); 

    var callingCellRef = writeSheet.getRange(callingRow, callingColumn); 
    var callingCellValue = callingCellRef.getValue(); 

    callingCellValue = Number(updateBool,callingCellValue); 

    Logger.log('Calling Cell row: %s column: %s', callingRow, callingColumn); 
    Logger.log('Calling Cell Value: %s', callingCellValue); 


} 

function Number (updateBool,callingCellValue) 
{ 
if (updateBool == 'no') { 
    //DONT do any updates 
    Logger.log('UpdateBool is no, no update'); 
    return callingCellValue; 
    } 
    else { 
    // do updates 
    var randomVariable = Math.random(); 
    Logger.log('UpdateBool is yes, update to: %s', randomVariable); 
    return randomVariable; 
    } 

    } 
+0

Спасибо, но я не думаю, что это поможет. В исходном коде я использовал «Number» для анализа значения как типа номера. В этом коде функция Number не выполняет этого? И я не понимаю, как это поможет вернуть значение ??? –

0

значение D4 является no. Обратите внимание, что это значение является строкой.

callingCellRef.getValue() возвращает no и число в строку возвращает NaN, поэтому значение callingCellValue является NaN.

Для того, чтобы получить значение D4 изменения

callingCellValue = Number(callingCellRef.getValue()); 

к

callingCellValue = callingCellRef.getValue(); 
Смежные вопросы