Alla ricerca di una formula "isFormula" per i fogli di calcolo di Google


13

Esiste una funzione che indicherà se una cella specifica ha un valore semplice (immesso manualmente) o ha una formula?

Risposte:


5

Con questo piccolo frammento puoi farlo.

Codice

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

uso

inserisci qui la descrizione dell'immagine

In questa risposta , Tom Horwood ha trovato il modo di eludere l'uso delle virgolette.

Esempio

Aggiungi lo script in Strumenti> Editor di script e premi il pulsante bug per attivare l'autenticazione.

Ho creato un file di esempio per te: Verifica la formula


Stavo vagando ... La tua funzione è in realtà ottenere una stringa che è l'indirizzo di una cella isFormula2("A1"). così ho provato a crearne una nuova versione in questo modo: function isFormula2(cell) { return (cell.getFormula())!=""; } e mi aspettavo che fosse richiamabile usando isFormula2(A1)ma questo non sembra funzionare e quando provo a eseguire il debug mostra cellcome indefinito ... qualsiasi idea del perché e se le cose potrebbero essere cambiato in modo che funzionerà con f(A1)invece di f("A1")?
Epeleg,

@epeleg Vedi la mia risposta rivista.
Jacob Jan Tuinstra,

:) quindi l'hai modificato in modo che invece di ottenere l'indirizzo ora ottenga una colonna e una riga. qui non c'è sintassi tale che la chiamata sarebbe solo isFormula(a1)? (in MS Excel sarebbe una funzione che ottiene un parametro range)
epeleg

@epeleg Il più vicino è isFormula_1 ("A2: A2") , guarda il mio file di esempio. Le funzioni personalizzate funzionano in questo modo. Senza le virgolette, otterrai il valore. Con virgolette la stringa, che può essere utilizzata come tale, ma non può essere copiata / incollata. La soluzione COLUMN e ROW è solo una soluzione (inevitabilmente).
Jacob Jan Tuinstra,

quale sarebbe il valore che una funzione personalizzata otterrebbe se la chiami con isFormula (a1: a1)? e che dire di isFormula (a1: b2)?
Epeleg,

9

Risposta breve

Utilizzare la funzione integrata ISFORMULA () .

Contesto e spiegazione

Penso di aver appena scoperto una formula non documentata nei nuovi Fogli Google. @Pnuts stava dicendo che la CELLformula non funzionava (in parte perché è disponibile solo nei nuovi Fogli Google), quindi ho copiato il codice in un nuovo foglio Google. È stato generato un errore, indicandomi che la mia formula (personalizzata) accetta solo un argomento e non due:
inserisci qui la descrizione dell'immagine

La ridenominazione isFormulain qualcos'altro, ha portato a una funzione personalizzata funzionante. Dopo questo, ho creato un altro foglio di Google e ho usato la isFormulaformula. La formula non viene visualizzata nel completamento automatico, ma funziona:
inserisci qui la descrizione dell'immagine

Quindi, se la formula è disponibile in tutti i nuovi Fogli Google, questa sarebbe la risposta migliore:

Formula

=isFormula(A1)

Nota

Disponibile solo nei nuovi Fogli Google. Ho chiesto ad altre persone di confermare la nuova formula ed è stata confermata. Poiché non è documentato, la sua implementazione non è certa e potrebbe scomparire. Il ARRAYFORMULAnon funziona quando viene utilizzato con questa nuova formula.

Esempio

Ho creato un file di esempio per te: isFormula


simpatico. sembra che Google stia adottando la mia raccomandazione :) Ma come posso passare ai "Nuovi fogli Google"?
Epeleg,

interessante. funziona per il mio account Gmail ma non nel mio account Google Apps ...
Epeleg

2
ISFORMULA () è ora documentato. Vedi support.google.com/docs/answer/6270316?hl=it
Rubén

2

Sembra che ci sia una funzione integrata nascosta ISFORMULA()da Google. Mi sono reso conto quando ho eliminato la mia funzione e funzionava ancora. L'ho provato in un nuovo foglio di calcolo e funziona ancora. Nessun problema di cache.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.