web-dev-qa-db-ja.com

Googleドキュメントのスプレッドシートの行に「最終更新」セルを自動的に設定するにはどうすればよいですか?

行のGoogle Docs Spreadsheetsに「最終更新」セルを自動的に設定するにはどうすればよいですか?

その行が最後に修正されたときにセルの値が自動的に設定される列を作成します。これは可能ですか?これをどのように行うか、これを設定するためにどのオプションを使用しますか?

MS Excelの回避策 が表示されますが、Google Docsには類似したものがあるはずですよね? (成功を祈っている)

複数の人が大きなシートを編集しています。改訂履歴を見ることができますが、「最終更新日」の列があればもっといいでしょう。

20
cwd

Google Apps Scriptを追加して、セルが編集されたときにキャプチャし、別のセルにタイムスタンプを追加してみてください。同様の以前の回答は次のとおりです。 Google Spreadsheet Timestamp?

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
   var r = s.getActiveCell();
   if( r.getColumn() == 13 ) { //checks the column
     var nextCell = r.offset(0, 1);
     if( nextCell.getValue() === '' ) //is empty?
       var time = new Date();
       time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
       nextCell.setValue(time);
   };
 };
}
19
OnenOnlyWalter

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())行のセルが変更されるたびに、数式が再計算されます。方程式に「x」を使用すると、エラーが保証されます。代わりに、日付を返します。

13
Robert

これが私のスクリプトです。最後の列にこの情報を入れます:

  1. セルに挿入(最後のセル=変更する行の最後の列)-GMT -3の日付、同じ時間を他のTZに置きたい場合は、コンカレントタイムゾーンの-3を変更します。デフォルトのTZに日付を自動的に入れたい場合は、これを修正するだけです:

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    to
    var date = Utilities.formatDate(new Date());
    
  2. それを変更するCell + Userと共にコメントを挿入します。

  3. 何かを更新するとポップアップが表示されます。 ActiveUserのみに表示されます。

    function onEdit(event)
    {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var actSht = event.source.getActiveSheet();
        var actRng = event.source.getActiveRange();
    
        var index = actRng.getRowIndex();
        var dateCol = actSht.getLastColumn();
        var lastCell = actSht.getRange(index,dateCol);
        var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    
        lastCell.setValue(date);
        lastCell.setComment("Ultima Modificacion: " + actRng.getA1Notation() +' por '+Session.getActiveUser());
        ss.toast('Ultima Modificacion = '+ actRng.getA1Notation()+' por '+Session.getActiveUser());
    }
    
1
Matias

これは、列番号をハードコーディングするのではなく、ヘッダーを使用して列を検索し、カスタムタイムゾーンを使用するバージョンです。

function updateModified(options) {
  var sheet = SpreadsheetApp.getActiveSheet();
  if (options.sheetName && sheet.getName() != options.sheetName) {
    return;
  }

  var modifiedColumnName = options.modifiedColumnName || 'Modified';
  var header = sheet.getDataRange().offset(0, 0, 1).getValues()[0];
  var modifiedColumn;
  for (var i=0; i < header.length; i++) {
    if (header[i].trim() == modifiedColumnName) {
      modifiedColumn = i + 1;
      break;
    }
  }
  if (typeof modifiedColumn != 'number') {
    throw new Error("Can't find column with name: " + modifiedColumnName);
  }

  var activeCell = sheet.getActiveCell();
  if (activeCell.getColumn() == modifiedColumn) {
    return;
  }

  var modifiedCell = sheet.getRange(activeCell.getRow(), modifiedColumn);
  var formattedDate = Utilities.formatDate(new Date(), "America/Los_Angeles", "M/dd/yy HH:mm");
  modifiedCell.setValue(formattedDate);
}

function onEdit() {
  updateModified({sheetName: 'Jobs'});
}

UTCを使用するには、タイムゾーンをUTCに変更するだけです。

1
Benjamin Atkin

参照セルが変更されたときに新しい日付を書き込む関数を作成しました。この場合、セル値はTRUEまたはFALSEですが、任意の値に編集できます。

function WhenUpdated(cell1) {
  if(cell1){
    return new Date();
  }
  else return null;
}
1
Gonzalo