用于保存数据并将数据加载到其他工作表的Google Spreadheet脚本

时间:2017-02-24 12:20:10

标签: google-apps-script google-sheets

首先,感谢社区互相帮助!

我是一名教师,我正在构建一个用于评分学生的电子表格。更具体地说,我的电子表格有几张:输入,变量,数据(现在和测试')包含以下内容:

输入

  • 名称选择(使用数据表上的名称列表下拉菜单)(单元格B3)
  • 标准列表,其中包含相应的下拉菜单列表 是/否(或其他选项,基于变量表中的列表)(D栏)
  • 成绩计算

变量

  • 用于的一些列表,例如是/否,或好/平均/坏等 输入表单上的下拉菜单

数据

  • 学生姓名列表,用于名称下拉菜单中 输入表上的选择

测试

  • 此表用于测试我的脚本

等级

  • 此表用于收集学生成绩

要完全理解我所说的内容,请在此处查看相关表格:https://docs.google.com/spreadsheets/d/1IHdlEhjBLBEyqopbicthQLdaGxtH3_1gt1sNOvRlwgo/edit?usp=sharing

现在,我正在寻找的功能(工作流程)如下:

  1. 在输入表格上:我从列表中选择学生的姓名,填写他的结果(此表格将计算成绩)并单击保存按钮。这会将结果列复制到测试表,在那里它将作为相应名称后面的一行粘贴 到目前为止一直很好(我已设法让它发挥作用。)
  2. 同时,必须将成绩复制到成绩单。这是让我有点困惑的地方,因为我需要有一些方法从输入表中选择等级。我以为我可以根据单元格backgroundcolor或FontSize或类似的东西选择值,但是我无法让它工作。
  3. 当成绩保存在成绩单中时,我将能够使用 它们在其他表中用于审查和比较。 当输入并保存学生成绩时,我也需要 选项将测试表中的数据加载回输入 片。所以基本上,这是以另一种方式执行Save操作 周围;它通过比较选定的名称找到正确的数据 输入表与测试表上的名称列表然后 复制相应的结果行并将其粘贴为列 输入表。
  4. 到目前为止我一直在使用的代码:

    function Save() {
      var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Input');
      var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
    
      var studentName = sourceSheet.getRange('B3').getValue(); //returns the name of the current student
      var studentResult = sourceSheet.getRange(5,4,sourceSheet.getLastRow()).getValues(); //returns the results of the current student
    
      var columnValues = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues(); //returns all student names listed in first column of targetsheet
      var studentRow = findIndex(columnValues, studentName)+1;  //returns the rownumber where studentName was found
      var ResultInRow = col2row(sourceSheet.getRange(5,4,sourceSheet.getLastRow()).getValues()); //transpose the column data to row data
    
     targetSheet.getRange(studentRow,2,1,sourceSheet.getLastRow()).setValues(ResultInRow); //select cellrange and fill with the results 
    
    }
    
    function findIndex(columnValues, studentName) {
      for(var i=0, iLen=columnValues.length; i<iLen; i++) {
        if(columnValues[i] == studentName) {
          return i;
        }
      }
    }
    
    
    function col2row(column) {
      return [column.map(function(row) {return row[0];})];
    } 
    
    function row2col(row) {
      return row[0].map(function(elem) {return [elem];});
    }
    

    我的问题实际上是双重的: 首先,由于我不是任何程度的编码器,我想知道我的方法是否有意义,或者是否有另一种 - 更好的方式做同样的事情? 第二,你可以帮我解决一下我需要选择 等级的代码,最好用成绩名称(即练习名称)来标记吗?

0 个答案:

没有答案