2016-04-26 7 views
1

マイアプリスクリプトコードは、セルの編集時にwatchColに基づいて隣接セルをタイムスタンプします。編集したセルが空白の場合、隣接セルを空にするにはどうすればいいですか?

私が行う必要があるのは、ユーザーが値を削除した場合にタイムスタンプを削除することです。例えば。タスクのリストのいずれかを完了すると、Xを2行目の列に配置しますが、Xの意味を取り除いてタスクを終了しなかった場合は、その横にタイムスタンプがありません。

function onEdit(e) 
{ 
    var s = e.source.getActiveSheet(), 
    watchCols = [2, 5, 8, 11, 14, 17], 
    offsetCol = [1, 1, 1, 1, 1, 1], 
    ind = watchCols.indexOf(e.range.columnStart); 
    if (s.getName() !== "Sheet1" || ind === -1) return; 
    e.range.offset(0, offsetCol[ind]) 
    .setValue(!e.value ? null : Utilities.formatDate(new Date(), "GMT-4", "YYYY-MMM-dd hh:m:s a")) 
} 

これが動作するようには思えない私が作った最後の試みです:

if(ISBLANK(e.range.columnStart) && ISBLANK(e.range.rowStart)) { 
    e.range.offset(0, offsetCol[ind]).setValue(""); 
    } else { 
    e.range.offset(0, offsetCol[ind]).setValue(!e.value ? null : Utilities.formatDate(new Date(), "GMT-4", "YYYY-MMM-dd hh:m:s a")) 
    } 
+0

これは面白いです... Metaは親切に別の問題を手伝ってくれました。インストール可能なトリガーを使用することで元のコードは変更せずに動作します。ユーザーがXなどの値を取り除くとタイムスタンプ列は空になります細胞。なぜそれがうまくいくのか分かりませんが、理由は分かります。 http://stackoverflow.com/questions/36871241/how-to-allow-onedit-function-to-affect-protected-cell-in-a-google-sheet – markSS

+0

ところで、ISBLANKスプレッドシート機能であり、Apps Script機能ではありません。スプレッドシート機能はApps Scriptでは使用できません。 –

答えて

0

これは私がバグを検討したい編集event object、文書化されていないの動作です。これは、インストール可能なエディタトリガと、セルをクリアするユーザに関する単純なonEditトリガの動作が異なります。

  1. インストール可能なトリガー:e.oldValue(イベントオブジェクトがvalue性質を持っていない)e.valueが定義されていない、古い値を持っています。
  2. シンプルなトリガ:未定義falsyですが、オブジェクトがtruthyです:e.oldValueは古い値を持ち、e.valueは2例では、異なる!e.value振る舞うと、あなたの条件文が理由です{"oldValue":"whatever it was"}

オブジェクトを保持しています。

関連する問題