-2

これは私の最初の質問です。私は私の知る限りでサイトを検索しましたが、私の質問の他の例は見つかりませんでした。ここでGoogle Script:各教師の学校スケジュールデータの印刷

は、Googleスプレッドシートでは、私は同じGoogleスプレッドシートドキュメント内の2枚を持って https://docs.google.com/spreadsheets/d/1HxyhoxuPK8H8_vhLg0ZZ-THyOn1cn9nPYRyls8y47iM/edit?usp=sharing

ファイルです。 最初の "スキーマ"には、教師用のベーススクールスケジュールが含まれています。これは複製する必要があります。その結果、すべての教師がこの正確な設定を行い、すべての一意のユーザーが割り当てられたクラスでのみ50行のスケジュールデータを持ちます。

2番目のシートには、ユーザーに関する情報が含まれています。各行には、UNIログインユーザ名と、ユーザuni12345などの指定されたクラス1a-1、4a-1、および8a-1が含まれています。 "uni12345"のスケジュールデータで、1a-1は1を置き換える必要があります。

私はこれらのデータ(たくさんの行)を1枚のシートにまとめたいと思います。

リストのuser1 + 2の出力をどのようにしたいかを示すCombined Exampleシートを作成しました。

他のところで質問が既に部分的に回答されている場合は、私もそれを見ることができます!

編集: 私の元の質問以来、私はそれを動作させました - 今は6分間のスクリプト実行時間制限に迫っています。それを回避する方法、例えば。最適化?このコードは1で、各行1をプッシュする必要がなくなり、新しい配列を作成し :

function merge() { 

    var CurrentDate  = new Date() ; 
    var CurrentDateString1 = Utilities.formatDate(CurrentDate, "GMT", "MM-dd-yyyy HH:mm:ss") ; 

    var ss=SpreadsheetApp.getActive(); 
// var mergeSht=ss.getSheetByName(CurrentDateString1);      
    var users=ss.getSheetByName('users'); 
    var schema=ss.getSheetByName('schema'); 

    var mergeSht = ss.insertSheet(); 
    mergeSht.setName(CurrentDateString1); 

    var usersValues = users.getDataRange().getValues(); 
    var schemaValues = schema.getDataRange().getValues(); 

    var counter = 1; 


    for(var n=1; n < usersValues.length ; n++){ 

    var usersValue = usersValues[n]; 

    var uniName = usersValue[5]; 
    var levelInd = usersValue[2]; 
    var levelMellem = usersValue[3]; 
    var levelUdsk = usersValue[4]; 

// Logger.log(usersValues[n][5]) 

    for(var i=1; i < schemaValues.length ; i++){ 

     var schemaValue = schemaValues[i]; 

     if (schemaValue != null && schemaValue.length > 0) { 

     var level = schemaValue[3]; 
     var subject = schemaValue[4]; 
     var room = schemaValue[5]; 
     var day = schemaValue[6]; 
     var position = schemaValue[7]; 

     var levelAfd = getlevel(level,levelInd, levelMellem, levelUdsk); 
     Logger.log(levelAfd); 

     // print 

     var row=[]; 
     row.push(counter++,'','unilogin:'+ uniName, levelAfd, subject, room, day, position); 
     mergeSht.appendRow(row); 


     } 
    } 
    } 
    } 

    function getlevel(level, levelInd, levelMellem, levelUdsk){ 
     switch (level) 
    { 
     case 1: 
      return levelInd; 
     case 4: 
     return levelMellem; 
     case 7: 
      return levelUdsk; 
    } 
} 
+0

何を試しましたか? [質問] – Cooper

+0

私は新しいソリューションを質問に追加しました。今私はGoogleスクリプトで6分の最大の除外時間を迎えています。 –

+0

実行記録はどのように見えますか? – Cooper

答えて

0

は、ここであなたが試みることができる何か他のものです。代わりに、最後にはマージシャット全体を一度に読み込みます。

function merge() 
{ 
    var CurrentDate  = new Date() ; 
    var CurrentDateString1 = Utilities.formatDate(CurrentDate, "GMT", "MM-dd-yyyy HH:mm:ss") ; 
    var ss=SpreadsheetApp.getActive(); 
// var mergeSht=ss.getSheetByName(CurrentDateString1);      
    var users=ss.getSheetByName('users'); 
    var schema=ss.getSheetByName('schema'); 
    var mergeSht = ss.insertSheet(); 
    mergeSht.setName(CurrentDateString1); 
    var usersValues = users.getDataRange().getValues(); 
    var schemaValues = schema.getDataRange().getValues(); 
    var counter = 1; 
    var mergeA=[];//Small change 
    mergeA.push(['H1','H2','H3','H4','H5','H6','H7','H8']); //First row is headers 
    for(var n=1; n < usersValues.length ; n++) 
    { 
    var usersValue = usersValues[n]; 
    var uniName = usersValue[5]; 
    var levelInd = usersValue[2]; 
    var levelMellem = usersValue[3]; 
    var levelUdsk = usersValue[4]; 
// Logger.log(usersValues[n][5]) 
    for(var i=1; i < schemaValues.length ; i++) 
    { 
     var schemaValue = schemaValues[i]; 
     if (schemaValue != null && schemaValue.length > 0) 
     { 
     var level = schemaValue[3]; 
     var subject = schemaValue[4]; 
     var room = schemaValue[5]; 
     var day = schemaValue[6]; 
     var position = schemaValue[7]; 
     var levelAfd=''; 

     switch(level) 
     { 
      case 1: 
      levelAfd=levelInd; 
      break; 
      case 4: 
      levelAfd=levelMellem; 
      break; 
      case 7: 
      levelAfd=levelUdsk; 
      break; 
      default: 
      levelAfd=''; 
      break; 
     } 
     if(levelAfd) 
     { 
      mergeA.push([counter++,'','unilogin:'+ uniName, levelAfd, subject, room, day, position]); 
     } 
     } 
    } 
    } 
    mergeSht.getRange(1,1,mergeA.length,mergeA[0].length).setValues(mergeA); 
} 
+0

それは興味深いね!しかし、 "Googleシートスクリプトエラー - オブジェクトを配列に変換できません[] []" –

+0

エラーは58行目で発生します。 "mergeSht.getRange(1,1、mergeA.length、mergeA [0] .length)。 setValues(mergeA); " –

+0

私はmergeA配列に小さな変更を加えました。もう一回やってみよう。 – Cooper

関連する問題