Colonna Aggiornamento automatico nel foglio di calcolo di Google che mostra la data dell'ultima modifica


37

Prova di trovare un modo per avere l'aggiornamento automatico della colonna due per mostrare un timestamp dell'ultimo aggiornamento. Mi rendo conto che il documento mostra un timestamp dell'ultima modifica, ma abbiamo molti clienti che accedono e modificano il documento allo stesso tempo. Quindi questa richiesta è stata inserita. Devo ammettere che non ho fatto la programmazione, quindi questo è al di là di me.

Myanda aveva pubblicato qualcosa che sembrava sulla strada giusta, ma non siamo sicuri di come implementarlo per le nostre esigenze:

Timestamp di Google Spreadsheet?


Sarebbe utile se potessi collegarci al documento o fornire un documento di esempio di ciò che stai cercando. Posso modificare la mia altra risposta di conseguenza, ma non sono sicuro esattamente cosa stai chiedendo. Hai solo bisogno di una singola cella aggiornata con un timestamp che mostra quando è stato aggiornato l'intero foglio di calcolo?
OnenOnlyWalter

Ehi Onen. Quello che stiamo cercando è, nella colonna 2, ogni riga si aggiorna con un timestamp ogni volta che viene aggiornata una cella nella rispettiva riga. Non riesco a pubblicare il documento poiché sfortunatamente è riservato. Ma contiene 21 colonne e 60 righe. questo aiuta?
RichGonzalez,

Capito, fammi dare un'occhiata al mio codice originale e
ricontattarti

Onen molto apprezzato!
RichGonzalez,

Risposte:


36

Ok, ecco una versione modificata del codice nella mia risposta precedente:

function onEdit(e) {
  // Your sheet params
  var sheetName = "MySheet";
  var dateModifiedColumnIndex = 2;
  var dateModifiedColumnLetter = 'B';

  var range = e.range; // range just edited
  var sheet = range.getSheet();
  if (sheet.getName() !== sheetName) {
    return;
  }

  // If the column isn't our modified date column
  if (range.getColumn() != dateModifiedColumnIndex) { 
    var row = range.getRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy, hh:mm:ss");
    var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row.toString());
    dateModifiedRange.setValue(time);
  };
 };

Ciò che fa è afferrare la riga di qualsiasi cella che viene modificata e assegna un timestamp alla seconda colonna di quella particolare riga.

Per implementare, tutto ciò che devi fare è andare nel foglio di calcolo e fare clic su Tools> Script Editor. Nella pagina dell'editor risultante, basta incollarlo qui. Poiché questa è una onEdit()funzione, dovrebbe funzionare senza dover aggiungere nient'altro alle celle del foglio di calcolo, incollalo nell'editor e salvalo.

Per il timestamp, ho impostato il formato su MM / gg / aa e ho lasciato l'ora. Se vuoi cambiarlo, puoi semplicemente cambiare l'uso di Utilities.formatDate.


Onen, funziona perfettamente! Grazie mille!
RichGonzalez,

1
Felice di sentirlo! Riesci a contrassegnare questa risposta con un segno di spunta allora :) Direi che è stato così che altre persone possano sapere che questa soluzione funziona, ma è anche perché vorrei i punti: P
OnenOnlyWalter

Andrà bene. Funziona sicuramente. Una domanda di follow-up. Niente di così complimentato. Passare a PST non sembra cambiarlo in ora solare del Pacifico, ma EST funziona. Java legge PST come abbreviazione diversa. E c'è un modo per visualizzare l'ora come 12 ore rispetto all'ora militare?
RichGonzalez,

1
il timestamp non funziona per me. Con me invece funziona "20yy-MM-dd HH: mm". Penso che dd; deve essere minuscolo o non funziona (a meno che non sia il suo gennaio, come è stato scritto, ahahahah).
Riccardo,

1
Nota che l'uso di "DD" per .formatDate()ti porterà al "Giorno dell'anno", ad es. 365 per il 31 dicembre. Probabilmente vuoi "dd". Puoi vedere un elenco completo dei valori del formato della data qui: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen,


4

Spero che sia OK mettere qui. Di seguito è una modifica della funzione sopra, ma per farlo per una riga (riga 9) anziché per le colonne. Capire come utilizzare l'assegnazione della colonna è stato molto frustrante, ma alla fine è stato estremamente semplice. Grazie a OnenOnlyWalter per il codice originale:


function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); // Get spreadsheet name 
    var r = s.getActiveCell(); // store active cell name in current spreadsheet 
  var cell1 = 9 // This is the row I want to put values
  if(r.getRow() != cell1) { // Ignores this row (where I put the dates)
    var column = r.getColumn();  // Get column # from active cell
    var time = new Date(); // Get date and time of last mod
    time = Utilities.formatDate(time, "GMT-08:00", "MM/DD/yy, hh:mm:ss"); // Format date and time
    SpreadsheetApp.getActiveSheet().getRange(cell1,column).setValue(time); // put in time in cell
  };
 };

Questo sembra funzionare abbastanza bene per me. Grazie per aver corretto l'errore di riga 8 di @ OnenOnlyWalter.
Zlatty,

Poiché gli orologi degli utenti possono essere imprecisi, esiste un modo standard per ottenere un timestamp accurato sul lato server?
Sim

@Sim Google Apps Script viene eseguito sul lato server. Il tempo che ricevi è dal server.
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.