2011-01-28 14 views
11

È possibile definire una funzione in Google Spreadsheets che può essere utilizzata in qualsiasi cella?È possibile definire una nuova funzione nel foglio di calcolo di Google-docs?

Sarebbe utile se potessi definire e utilizzare funzioni che si riferiscono ad altre celle nello stesso modo in cui posso utilizzare funzioni native, ad es. inserendo =myfunction(C1, C2, C3)

+0

Queste funzioni personalizzate sono lente. Stai attento. – fiatjaf

+0

Sembra che le funzioni disponibili nel foglio di calcolo non siano tutte disponibili per lo script. Ad esempio, se si tenta di utilizzare la funzione JOIN in uno script, si ottiene l'errore "JOIN non definito", anche se l'utilizzo di JOIN nel foglio di calcolo funziona correttamente. – Triynko

risposta

8

Sì, c'è uno tutorial. Basta usare le funzioni javascript per nome nel tuo foglio di calcolo. Definirli usando Strumenti> Editor di script.

Fare attenzione alle restrizioni sul nome; Ero confuso dal comportamento delle funzioni che ho creato con nomi come "function x10() {}" non trovato. Rinominare un nome più lungo lo ha risolto. Ci sono probabilmente regole documentate per ciò che non è permesso, ma non so dove siano.

+5

x10 non è un nome di funzione valido perché è anche il nome nativo di una cella (riga "10", colonna "X"). Oltre a ciò non ci sono regole speciali. L'altro fatto importante da ricordare è che le funzioni personalizzate dovrebbero funzionare SOLO con i parametri passati, cioè non dovrebbero usare valori esterni perché la funzione deve essere deterministica (lo stesso input dovrebbe sempre restituire lo stesso valore, poiché i fogli di calcolo memorizzeranno quel valore). –

-2

Sono un "newbee". Ma è la mia esperienza che è possibile accedere a una "cella" tramite l'oggetto "intervallo". È necessario definire l'intervallo come una singola cella. Ad esempio "A1: A1", ti darà accesso alla cella in "A1".

A RANGE è un oggetto associato a una "SCHEDA". Un SHEET è un oggetto associato a un "FOGLIO DIFFUSIONE".

Ecco alcuni esempi di codice per accedere cella A1 nel foglio attivo corrente:

var cell_A1 = SpreadsheetApp.getActiveSheet().getRange("A1:A1"); 

Da qui si può passare l'oggetto come un qualsiasi altro parametro.

myFunction(cell_A1); 

La funzione di ricezione deve "sapere" che si tratta di un "intervallo". Può accedere ai suoi valori solo chiamando "metodi" associati all'oggetto "intervallo" .

Attenzione! Un "intervallo" può consistere di più di una cella. La funzione chiamata dovrebbe verificare che funzioni con una singola cella. Se si passa un intervallo di più di una cella, la funzione potrebbe non essere come si aspetta.

I due metodi di un oggetto intervallo: "getNumRows()" e "getNumColumns()" restituisce i numeri di Righe e colonne in un oggetto intervallo.

In generale, se si utilizzano metodi che sono limitati a modificare o accedere a una singola cella e operare su un intervallo più ampio, la funzione sarà solo eseguita sul membro della cella in alto a sinistra. Ma fa attenzione. Mentre è possibile che assuma che un metodo modifichi solo una singola cella, potrebbe effettivamente influenzare tutte le celle dell'intervallo. Leggi la documentazione da vicino.

C'è un altro metodo per ottenere un intervallo di una singola cella. Il suo insegnamento assomiglia a questo:

var cell_B2 = SpreadsheetApp.getActiveSheet().getRange(2, 2, 1, 1). 

I primi due parametri dire la funzione "getRange" la posizione della cella (in fila, formato di colonna). I secondi due parametri definiscono il numero di "righe" e "righe" associate all'intervallo. Impostandoli entrambi su "1", si accede a una singola cella.

Spero che questo aiuti.

+1

Questo non è quello che sta chiedendo. Sta chiedendo di usare la funzione custon proprio come le funzioni integrate del foglio di calcolo nelle celle. In questi casi NON ottieni valori di cella come hai detto tu. La tua spiegazione si applica solo alle funzioni "regolari" con uno script e non alle funzioni personalizzate. –

Problemi correlati