Google Script:为每位教师打印学校日程安排数据

时间:2017-09-29 22:50:27

标签: google-apps-script google-sheets google-spreadsheet-api

这是我的第一个问题。我尽我所知搜索了网站,但没有找到任何其他问题的例子。

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

我在同一个Google表格文档中有两张纸。 第一个“模式”包含教师的基础学校课程表,不同的课程中有不同的课程。这需要复制,以便所有教师都具有这种确切的设置 - 以便所有唯一用户具有相同的50行计划数据 - 仅使用他们分配的类。

第二张表包含有关用户的信息。例如,每行包含UNI登录用户名及其指定的类1a-1,4a-1和8a-1,用于用户uni12345。 1a-1需要在“uni12345”的时间表数据中替换1。

我希望所有这些数据(很多行)组合成一张表,fx。称为“合并” - 但您可以选择名称: - )

我制作了一个组合示例表,它显示了我希望列表中的user1 + 2输出的方式。

如果问题已在其他地方得到部分解答,我也很乐意看到它!

编辑: 由于我原来的问题,我已经使它工作 - 只是现在我正在达到6分钟的脚本exectution时间限制。任何方式,例如。优化

    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;
    }
}

1 个答案:

答案 0 :(得分: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);
}