Coluna Atualização automática na planilha do Google mostrando a data da última modificação

37

Tentando descobrir uma maneira de fazer a atualização automática da coluna dois para mostrar um registro de data e hora da última atualização. Sei que o documento mostra um carimbo de data e hora da última modificação, mas temos muitos clientes acessando e ajustando o documento ao mesmo tempo. Portanto, esse pedido foi feito. Admito que não fiz codificação, portanto isso está além de mim.

Myanda havia postado algo que parecia no caminho certo, mas não temos certeza de como implementá-lo para nossas necessidades:

Data e hora da planilha do Google?

RichGonzalez
fonte
Ajudaria se você pudesse nos vincular ao documento ou fornecer um exemplo de documento do que está procurando. Posso modificar minha outra resposta de acordo, mas não sei exatamente o que você está perguntando. Você só precisa de uma única célula atualizada com um carimbo de data / hora que mostre quando toda a planilha foi atualizada?
OnenOnlyWalter
Hey Onen. O que procuramos é que, na coluna 2, cada linha seja atualizada com um carimbo de data / hora a qualquer momento em que qualquer célula em sua respectiva linha for atualizada. Não consigo postar o documento, pois é confidencial, infelizmente. Mas contém 21 colunas e 60 linhas. Isso ajuda?
RichGonzalez
Entendi, deixe-me dar uma olhada no meu código original e voltar para você :)
OnenOnlyWalter
Onen muito apreciado!
RichGonzalez

Respostas:

36

Ok, aqui está uma versão modificada do código na minha resposta anterior:

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

O que isso faz é pegar a linha de qualquer célula que é alterada e atribui um carimbo de data e hora à segunda coluna dessa linha específica.

Para implementar, tudo o que você precisa fazer é acessar a planilha e clicar em Tools> Script Editor. Na página do editor resultante, basta colar isso lá. Como essa é uma onEdit()função, ela deve funcionar sem precisar adicionar mais nada às células da planilha, basta colar no editor e salvá-lo.

Para o registro de data e hora, defino o formato como MM / dd / aa e deixei a hora. Se você quiser alterar, basta alterar o uso de Utilities.formatDate.

OnenOnlyWalter
fonte
Onen, isso funciona perfeitamente! Muito obrigado!
RichGonzalez
1
Fico feliz em ouvir isso! Você pode marcar essa resposta com uma marca de verificação então :) Eu diria que era para que outras pessoas possam conhecer esta solução funciona, mas é também porque eu gostaria os pontos: P
OnenOnlyWalter
Vai fazer. Definitivamente funciona. Uma pergunta de acompanhamento. Nada como elogiado. Alterar para PST não parece alterá-lo para o horário padrão do Pacífico, mas o EST funciona. O java lê PST como uma abreviação diferente. E existe uma maneira de exibir o tempo como um tempo de 12 horas vs tempo militar?
RichGonzalez
1
timestamp não funciona para mim. Comigo "20yy-MM-dd HH: mm" funciona em seu lugar. Eu acho que dd; tem que estar em minúsculas ou não funciona (a menos que seja em janeiro, quando foi escrito, ahahahah).
Riccardo
1
Observe que o uso de "DD" para .formatDate()obterá o "Dia do ano" - por exemplo, 365 para 31 de dezembro. Você provavelmente deseja "dd". Você pode ver uma lista completa dos valores do formato da data aqui: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen
8

Para sua informação, a resposta aceita DDé o formato do dia, que permite obter algo como "312", ou seja, o 312º dia do ano.

Eu usei isso:

"yyyy-MM-dd, hh:mm:ss"

para conseguir esta:

2013-11-12, 03:43:20
Dan Nguyen
fonte
1
por que não corrigir a resposta aceita?
28418 alexkovelsky
4

Espero que esteja tudo bem colocar aqui. Abaixo está uma modificação da função acima, mas para fazer isso por uma linha (linha 9) em vez de colunas. Descobrir como usar a atribuição da coluna foi muito frustrante, mas acabou sendo extremamente simples. Agradecimentos a OnenOnlyWalter pelo código original:


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
  };
 };
user2023699
fonte
Isso pareceu funcionar muito bem para mim. Obrigado por corrigir o erro da linha 8 de @ OnenOnlyWalter.
Zlatty 9/08
Como os relógios do usuário podem ser imprecisos, existe uma maneira padrão de obter um registro de data e hora preciso e do lado do servidor?
Sim
O @Sim Script do Google Apps é executado no lado do servidor. O tempo que você recebe é do servidor.