2017-10-12 21 views
0

次のスクリプトは、その日の終わりに実行する必要があります。タイマーで実行するようにしましたが、うまく動作しません。私はスタッフのスケジュールを設定するために、その日の異なる部分に対応する5枚のシートを持っています。一日の終わりに、私はマスターシートにそれを送って時間を計り、さまざまな作業を行いました。私の問題は次のとおりです: - 1)空白のGoogleワークシートがあり、その中に5枚のシートと1枚の隠しシートがあります。可能であれば、その名前の日にマスターコピーに自動的に送信する必要があります。 2)彼らは3ヶ月前までに作成することができますし、毎日空白のバックアップを送信したくない。 3)新しく作成したシートの「バックアップ」ボタンを押すと、スクリプトを承認する必要があります。スクリプトが一貫して実行されていない

新しいスプレッドシートでスクリプトを承認する必要がない方法はありますか。誰かがこれを自動化するためのより良いアイデアを持っていますか?

function onOpen() { // This function adds a custom menu to the spreadsheet (Backup to archive) so you can run the script from there. 


var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Backup') 
    .addItem('Backup','dataBackup') 
    .addItem('Name','nameOfSpreadsheet') 
    .addToUi(); 

} 
function nameOfSpreadsheet() { 
var s=SpreadsheetApp.getActive().getName().replace(/(\d{1,2}\.\d{1,2}\.\d{1,2}).*/,'$1'); 
return s; 
} 

    function dataBackup() { 
    var inputSS = SpreadsheetApp.getActiveSpreadsheet(); 
    var archiveSS = SpreadsheetApp.openById('146WU8RghfFqlCpCSX7n6kBAKOyxcpVKt14yhVfvYz-g'); 
    var user = Session.getActiveUser().getEmail(); 
    var sheetNames = ['AM trip', 'PM trip', 'Pool/Beach', 'Night Dive']; 
    for (var i = 0; i < sheetNames.length; i++) { 

    var inputSheet = inputSS.getSheetByName(sheetNames[i]); 
    var archiveSheet = archiveSS.getSheetByName(sheetNames[i]); 

    var date = inputSheet.getRange('A2').getValue(); // Changed to stop inadvertent cell changes, also made text white so not seen. 
    var data = inputSheet.getRange('E7:U37').getValues().filter(function(row) { return row[0] !== '' || row[1] !== ''}); 

    for (var x = 0; x < data.length; x++) { 
     data[x].splice(0, 0, date); 
    } 
    var getDate = archiveSheet.getRange(archiveSheet.getLastRow(), 1).getValue(); 
    var maxRowLength = data.reduce(function(length, row) { return Math.max(length, row.length); }, 0); 
    var date = new Date(date); 

    if (date.getDate() === "Loading Data...") { 
    Utilities.sleep(10000); 
    SpreadsheetApp.flush(); 

    if (getDate.getDate() != date.getDate() || getDate.getMonth() != date.getMonth()) {  

     if (data.length != 0) { 
      archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), data.length); 
      archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, data.length, maxRowLength).setValues(data); 
     } else { 
      archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), 1); 
      archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, 1, 2).setValues([[date, 'No Data']]); 
     }}}}} 

答えて

0

それは、メニュー.addItem('Name','nameOfSpreadsheet')nameofSpreadsheetを置くために私には意味がありません。帰りを見る方法がないので、何も達成できません。

私はあなたのバックアップ機能を書き直してみました。私はそれが助けて欲しい

function dataBackup() 
{ 
    var inputSS = SpreadsheetApp.getActiveSpreadsheet(); 
    var archiveSS = SpreadsheetApp.openById('146WU8RghfFqlCpCSX7n6kBAKOyxcpVKt14yhVfvYz-g'); 
    var sheetNames = ['AM trip', 'PM trip', 'Pool/Beach', 'Night Dive']; 
    for (var i=0; i<sheetNames.length; i++) 
    { 
    var inputSheet = inputSS.getSheetByName(sheetNames[i]); 
    var archiveSheet = archiveSS.getSheetByName(sheetNames[i]); 
    var date=new Date(inputSheet.getRange('A2').getValue());  
    var rng=inputSheet.getRange('E7:U37'); 
    var dataA=rng.getValues(); 
    var data=[]; 
    for(var j=0;i<dataA.length;j++) 
    { 
     if(dataA[j][0] && dataA[j][1]) 
     { 
     data.push([dataA[j].splice(0,0,date)]); 
     } 
    } 
    var dv=archiveSheet.getRange(archiveSheet.getLastRow(), 1).getValue(); 
    date=(typeof(dv)!='undefined')?dv:'No Date Found'; 
    if (data.length>0) 
    { 
     archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), data.length); 
     archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, data.length, rng.getWidth()+1).setValues(data); 
    } 
    else 
    { 
     archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), 1); 
     archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, 1, 2).setValues([[date, 'No Data']]); 
    } 
    } 
} 
+0

ありがとうございます@cooper、メニューのスプレッドシートの名前を削除しました。私は働くと思っていたが、そうでなかったことがあった。書き直していただきありがとうございます。このエラーを取得します。何か案は? TypeError:未定義からプロパティ "0"を読み取ることができません。 (31行目、 "バックアップデータの更新"ファイル)これは31行目です。if(dataA [j] [0] && dataA [j] [1]) " – Paul

関連する問題