-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