2017-05-05 7 views
0

私は問題を抱えていて、いくつかの指針を本当に愛しています。これは数日間の頭痛です。Googleスプレッドシートに日付が移動するごとに自動的に範囲(列)がロックされますか?

私は従業員がその日に行われた作業に関する情報を毎日更新するシートを持っています。各列にはヘッダー行(この場合は3行目)に日付があり、翌日の終了後にその列をロックして、自分自身や他の人以外は編集できないようにします。これは、人々が間違いを隠蔽したり、誤ってデータを変更したり削除したりするのを防ぐためです。

私はこれを達成するスクリプトなどを探しています。このシートには約45個のタブがあり、すべて同じものが必要です。 私のアイデアは、ヘッダー行の日付に基づいて特定の時間にトリガーするスクリプトである可能性があります。したがって、日付が2017年5月5日の場合、それぞれの列は6日の真夜中にロックされます。

マイシートのコピーへのリンクマイナスデータはhereです。

また、最新のデータが入力されてから24時間後にセルをロックする方法があれば、選択した人以外の誰も編集を行わないようにすることができます。理想的な方法は実行できません。

このプロジェクトは本当に私の会社を助けてくれてありがとうございました。このコミュニティがとても役立ってくれて本当に感謝しています!

答えて

0

はい、これを行う方法があります。

私は簡単に解決策を説明します:

  1. のは、最初の行は1:1が連続した日付が含まれているとしましょう。
  2. 関数lockColumnsを作成すると、新しいprotectedの範囲が作成されます。
  3. 時間トリガーに機能lockColumnsを追加すると、毎日0:01〜1:00の間にトリガーされます。

そして今、いくつかのコード:

function lockColumns() { 
    var ss = SpreadsheetApp.getActive().getSheetByName('Sheet 1') 
    var range = ss.getRange('1:1').getValues()[0]; 
    var today = new Date(); 
    var todayCol = null; 
    for (var i=0; i<range.length; i++) {  
    if (today.isSameDateAs(range[i])) { 
     todayCol = i; 
     break; 
    } 
    } 

    var rangeToProtect = ss.getRange(1, todayCol +1, ss.getMaxRows(), 1) 
    var protection = rangeToProtect.protect().setDescription('Protected range'); 

    // Ensure the current user is an editor before removing others. Otherwise, if the user's edit 
    // permission comes from a group, the script will throw an exception upon removing the group. 
    var me = Session.getEffectiveUser(); 
    protection.addEditor(me); 
    protection.removeEditors(protection.getEditors()); 
    if (protection.canDomainEdit()) { 
    protection.setDomainEdit(false); 
    } 
    protection.addEditor('[email protected]'); // second person with edit permissions 
} 

/* 
http://stackoverflow.com/a/4428396/2351523 
*/ 
Date.prototype.isSameDateAs = function(pDate) { 
    return (
    this.getFullYear() === pDate.getFullYear() && 
    this.getMonth() === pDate.getMonth() && 
    this.getDate() === pDate.getDate() 
); 
} 
関連する問題