Как вернуть #N/A из скрипта Google Sheet?

Это кажется тривиальным вопросом. Но я провел несколько раз, я все еще не могу найти какие-либо подсказки из Интернета. Я пробовал обходные пути. Они все не хорошие. возврате null или же undefined просто приведет к пустой ячейке. Конечно, возврат "#N/A" (в виде строки) далек от добра.

Например, у нас есть функция в Google App Script.

function GIVE_ME_NA() {
    return NA();     // This won't work
}

И в ячейках А1 и А2

A1 =GIVE_ME_NA()
A2 =ISNA(A1)

Желаемые результаты, показанные в A1 и A2:

    A       B
1  #N/A   TRUE

В формуле листа мы можем просто использовать =NA(), Но в App Script я не могу.

2 ответа

В настоящее время это невозможно, поскольку поддерживаемые возвращаемые значения для пользовательских функций - это строка, число, логическое значение и Дата.

Как вы уже заметили, возвращение NA() не работает.

Пользовательская функция не может возвращать формулу, пользователь return '=NA()' устанавливается в Google Таблицах как ТЕКСТ, пока пользователь вручную не изменит значение ячейки (или не переведет ячейку в режим редактирования, затем нажмите Enter.

Связанный

Справка

Что делать, если вы

return "=NA()"?

По тому, как вы используете это, мне неясно, зачем вам газовый раствор, потому что вы все равно используете его как функцию в камере.

Если вы делаете обычный скрипт, вы можете использовать что-то вроде этого

ss.getRange(1,1)setFormula('=NA()');

Я на самом деле заинтригован этим, потому что я обычно не выполняю встроенные функции (слишком медленное enmasse).

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

function getThing(aRange){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var data = sheet.getRange(aRange).getValues();
  Logger.log(data);

  var result = [];
  for (var i=0; i<data.length;i++)
    {
      var row = [];
      for (var j=0; j<data[0].length; j++)
          {
               if (data[i][j] == "")
                   { 
                   row.push("=NA()"); 
                   continue;}                  

               var value = data[i][j];
               // DO OTHER LOGIC TO GET WHAT YOU WANT TO RETURN
               row.push(value);
          }//for loop
       result.push(row);

    }//for loop

  return result;

}//*****************************************************************************