-2

這是我的第一個問題。據我所知,我已經搜索了該網站,但還沒有發現任何其他我的問題的例子。谷歌腳本:打印每個老師的學校時間表數據

下面是谷歌試算表檔案 https://docs.google.com/spreadsheets/d/1HxyhoxuPK8H8_vhLg0ZZ-THyOn1cn9nPYRyls8y47iM/edit?usp=sharing

我有同樣的谷歌表文檔中的2張。 第一個「模式」包含一個老師的基本學校時間表,在不同的塊中有不同的班級。這需要被複制,以便所有教師都有這個確切的設置 - 以便所有唯一用戶具有相同的50行日程安排數據 - 僅限於其分配的類。

第二片包含有關用戶的信息。例如,每行包含一個UNI登錄用戶名和他們爲用戶uni12345指定的類1a-1,4a-1和8a-1。在「uni12345」的日程表數據中,1a-1需要替換1。

我想組合成一個片,FX所有這些數據(大量的行)。所謂的「組合拳」 - 但你得到你挑上的名字:-)

我已經做了,將實施例表,呈現我多麼想對列表中的用戶1 + 2的輸出。

如果問題已經被部分在其他地方回答,我會很樂意看也!

編輯: 由於我原來的問題,我已經使它的工作 - 只有現在我打6分鐘腳本執行時間限制。任何方式,例如。優化?

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

這裏是別的東西,你可以嘗試: 此代碼創建它避免了一個推每行一個新的數組。相反,最後一次加載整個mergeSht。

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