Szukasz formuły „isFormula” dla arkuszy kalkulacyjnych Google

13

Czy istnieje funkcja, która powie, czy określona komórka ma zwykłą (ręcznie wprowadzoną) wartość lub formułę?

epeleg
źródło

Odpowiedzi:

5

Za pomocą tego małego fragmentu możesz to zrobić.

Kod

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;
}

Stosowanie

wprowadź opis zdjęcia tutaj

W tej odpowiedzi Tom Horwood znalazł sposób na obejście stosowania cytatów.

Przykład

Dodaj skrypt w Narzędzia> Edytor skryptów i naciśnij przycisk błędu, aby aktywować uwierzytelnianie.

Utworzyłem dla Ciebie przykładowy plik: Check for Formula

Jacob Jan Tuinstra
źródło
Wędrowałem ... Twoja funkcja faktycznie otrzymuje ciąg znaków, który jest adresem komórki isFormula2("A1"). więc próbowałem utworzyć nową wersję tego typu: function isFormula2(cell) { return (cell.getFormula())!=""; } i spodziewałem się, że będzie można go wywoływać przy użyciu, isFormula2(A1)ale wydaje się, że to nie działa, a przy próbie debugowania pokazuje się celljako niezdefiniowany ... każdy pomysł, dlaczego tak jest i czy mogłoby być inaczej zmienione, więc będzie działać f(A1)zamiast f("A1")?
epeleg
@epeleg Zobacz moją poprawioną odpowiedź.
Jacob Jan Tuinstra
:) więc zmieniłeś go tak, aby zamiast uzyskać adres, teraz dostaje kolumnę i wiersz. czy tutaj nie ma takiej składni, że wywołanie byłoby po prostu isFormula(a1)? (w MS Excel jest to funkcja, która pobiera parametr zakresu)
epeleg
@epeleg Najbliżej jestFormula_1 („A2: A2”) , spójrz na mój przykładowy plik. Funkcje niestandardowe działają w ten sposób. Bez cytatów otrzymasz wartość. W cudzysłowie ciąg znaków, którego można użyć jako takiego, ale nie można go skopiować / wkleić. Rozwiązanie COLUMN and ROW to tylko okrążenie (nieuchronnie).
Jacob Jan Tuinstra
jaka byłaby wartość, jaką uzyskałaby funkcja niestandardowa, gdyby wywołać ją za pomocą isFormula (a1: a1)? a co z isFormula (a1: b2)?
epeleg
9

Krótka odpowiedź

Użyj wbudowanej funkcji ISFORMULA () .

Tło i objaśnienie

Myślę, że właśnie odkryłem nieudokumentowaną formułę w nowych Arkuszach Google. @Pnuts powiedział, że CELLformuła nie działa (częściowo dlatego, że jest dostępna tylko w nowych Arkuszach Google), więc skopiowałem kod do nowego Arkusza Google. Wystąpił błąd, mówiąc, że moja (niestandardowa) formuła akceptuje tylko jeden argument, a nie dwa:
wprowadź opis zdjęcia tutaj

Zmiana nazwy isFormulana coś innego spowodowała działającą funkcję niestandardową. Po tym stworzyłem jeszcze jeden Arkusz Google i użyłem isFormulaformuły. Formuła nie pojawia się w autouzupełnianiu, ale działa:
wprowadź opis zdjęcia tutaj

Jeśli więc formuła jest dostępna w nowych Arkuszach Google, to byłaby to najlepsza odpowiedź:

Formuła

=isFormula(A1)

Uwaga

Dostępne tylko w nowych Arkuszach Google. Poprosiłem kilka innych osób o potwierdzenie nowej formuły i jest ona potwierdzona. Ponieważ jest to nieudokumentowane, jego implementacja jest niepewna i może zniknąć. ARRAYFORMULANie działa w przypadku korzystania z tej nowej formule.

Przykład

Stworzyłem dla ciebie przykładowy plik: isFormula

Jacob Jan Tuinstra
źródło
ładny. wygląda na to, że Google przyjmuje moją rekomendację :) Ale jak przejść na „Nowe Arkusze Google”?
epeleg
ciekawy. działa na moim koncie Gmail, ale nie na moim koncie Google Apps ...
epeleg
2
ISFORMULA () jest teraz udokumentowany. Zobacz support.google.com/docs/answer/6270316?hl=pl
Rubén
2

Wygląda na to, że Google ma ukrytą wbudowaną funkcję ISFORMULA(). Zdałem sobie sprawę, kiedy usunąłem własną funkcję i nadal działałem. Wypróbowałem to w nowym arkuszu kalkulacyjnym i nadal działa. Brak problemu z pamięcią podręczną.

Juan Pérez
źródło