Google脚本:打印每位老师的学校排班数据

Google Script: print school schedule data for each teacher

这是我的第一个问题。我已尽我所知搜索该站点,但没有找到我的问题的任何其他示例。

这是 Google 表格文件 https://docs.google.com/spreadsheets/d/1HxyhoxuPK8H8_vhLg0ZZ-THyOn1cn9nPYRyls8y47iM/edit?usp=sharing

我在同一个 Google 表格文档中有 2 个 sheet。 第一个 "schema" 包含教师的基础学校时间表,在不同的块中有不同的 classes。这需要被复制,以便所有教师都有这个精确的设置——这样所有唯一用户都有相同的 50 行时间表数据——只有他们分配的 classes.

第二个 sheet 包含有关用户的信息。例如,每一行都包含一个 UNI 登录用户名及其指定的 class 1a-1、4a-1 和 8a-1 用户 uni12345。 1a-1 需要替换 "uni12345" 的时间表数据中的 1。

我想将所有这些数据(很多行)合并为一个 sheet,fx。叫做 "combined" - 但你可以选择名字 :-)

我制作了一个组合示例 sheet,它展示了我希望列表中 user1+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;
    }
}

您还可以尝试其他方法: 此代码创建一个新数组,避免逐行推送。相反,最后一次加载整个 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);
}