Ищите формулу isFormula для таблиц Google

13

Есть ли функция, которая скажет, имеет ли конкретная ячейка простое (введенное вручную) значение или имеет формулу?

epeleg
источник

Ответы:

5

С этим небольшим фрагментом вы можете сделать это.

Код

function isFormula(startcol, startrow) {
  // prepare string
  var str = String.fromCharCode(64 + startcol) + startrow;

  // retrieve formula
  var fCell = SpreadsheetApp.getActiveSpreadsheet()
    .getRange(str).getFormula();

  // return false if empty else true 
  return fCell ? true : false;
}

использование

введите описание изображения здесь

В этом ответе Том Хорвуд нашел способ обойти использование цитат.

пример

Добавьте скрипт в Сервис> Редактор скриптов и нажмите кнопку ошибки, чтобы активировать аутентификацию.

Я создал файл примера для вас: Проверьте формулу

Джейкоб Ян Туинстра
источник
Я бродил ... Ваша функция на самом деле получает строку, которая является адресом ячейки isFormula2("A1"). поэтому я попытался создать новую его версию следующим образом: function isFormula2(cell) { return (cell.getFormula())!=""; } и я ожидал, что она будет вызываться с использованием, isFormula2(A1)но это, похоже, не работает, и при попытке отладки это выглядит cellкак неопределенное ... любая идея, почему это так и если что-то может быть изменилось, так что будет работать f(A1)вместо f("A1")?
Epeleg
@epeleg Смотрите мой исправленный ответ.
Джейкоб Ян Туинстра
:) так что вы изменили его так, что вместо получения адреса теперь он получает столбец и строку. здесь нет такого синтаксиса, что вызов будет просто isFormula(a1)? (в MS Excel это была бы функция, которая получает параметр диапазона)
epeleg
@epeleg Самый близкий isFormula_1 ("A2: A2") , посмотрите на мой файл примера. Пользовательские функции работают таким образом. Без кавычек вы получите значение. С кавычками строка, которая может использоваться как таковая, но не может быть скопирована / вставлена. Решение COLUMN и ROW - это просто обходное решение (неизбежно).
Джейкоб Ян Туинстра
какое значение получит пользовательская функция, если вы вызовете ее с помощью isFormula (a1: a1)? а как насчет isFormula (a1: b2)?
epeleg
9

Короткий ответ

Используйте встроенную функцию ISFORMULA () .

Справочная информация и объяснение

Мне кажется, я только что обнаружил недокументированную формулу в новых Google Sheets. @Pnuts говорил, что CELLформула не работает (частично потому, что она доступна только в новых Google Sheets), поэтому я скопировал код в новый Google Sheet. Возникла ошибка, сообщающая, что моя (пользовательская) формула принимает только один аргумент, а не два:
введите описание изображения здесь

Переименование isFormulaво что-то еще, привело к работающей пользовательской функции. После этого я создал еще один Google Sheet и использовал isFormulaформулу. Формула не отображается в автозаполнении, но она работает:
введите описание изображения здесь

Таким образом, если формула доступна в новых листах Google, то это будет лучший ответ:

формула

=isFormula(A1)

Заметка

Доступно только в новых Google Sheets. Я попросил нескольких других людей подтвердить новую формулу, и она подтвердилась. Поскольку он недокументирован, его реализация неуверенна и может исчезнуть. ARRAYFORMULAНе работает при использовании этой новой формулы.

пример

Я создал файл примера для вас: isFormula

Джейкоб Ян Туинстра
источник
красивый. Похоже, Google принимает мою рекомендацию :) Но как мне перейти на "Новые листы Google"?
epeleg
интересный. это работает для моей учетной записи
Gmail,
2
ISFORMULA () теперь задокументирована. См. Support.google.com/docs/answer/6270316?hl=ru
Рубен
2

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

Хуан Перес
источник