根据结果​​比较数据和写入单元格数据

时间:2013-11-26 01:24:59

标签: google-apps-script google-apps-for-education

我对谷歌应用程序脚本相对较新,我正在通过构建脚本慢慢地努力。如果你给出答案,请尽量保持答案尽可能简单,这样我才能理解发生了什么。我想做什么。

  1. 我们的管理员必须完成8个步骤,以便为大楼中的每位教师进行评估,我正在尝试构建一个电子表格,根据通过Google表单提交的数据来跟踪它。
  2. 我将表单回复表中最后一行提交数据的前五列复制到跟踪器表。 (我可能不需要这么做。)数据包括时间戳,姓氏,名字,日期,阶段。

  3. 这是变得复杂的地方。我想将导入数据的姓氏与跟踪工具表的姓氏进行比较。如果姓氏不存在,请将其添加到列表的末尾,并将日期作为相应的匹配阶段放入行中。如果姓氏在那里,请将日期放在与匹配阶段对应的同一行中。

  4. 查看下面的示例,引入的姓氏是Smith。由于Smith位于列表中,因此将日期1/1/2014放在walkthrough2列中。随着管理员继续评估过程,将有更多的教师添加到列表中,并且它将增长到填充评估部分的日期。

  5. 跟踪器表中的数据

    Administrator     Teacher     PreEval     Walkthrough1     Walkthrough2
    
                      Brown       10/2/2013   10/15/2013       11/15/2103
    
                      Smith       10/2/2013   10/16/2013    
                      Korytoski   10/5/2013   10/17/2013    
    
                      Reddick     10/15/2013  10/17/2013    
    

    从表单回复电子表格中拉出数据

    11/10/2013 20:08:34    Smith     Kim    1/1/2014     Walkthrough2
    

    代码

    function copyLastRowtoTracker() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh = SpreadsheetApp.getActiveSheet();
    var lastRow = sh.getLastRow() 
    var lastCol = sh.getLastColumn();
    var name = sh.getRange(lastRow,1,1,5); 
    
    var tracker = ss.getSheetByName('Tracker');
    ss.setActiveSheet(ss.getSheets()[2]);
    var sht = SpreadsheetApp.getActiveSheet();
    var lastRowTracker = tracker.getLastRow() 
    
    name.copyValuesToRange(tracker,1,5,lastRowTracker+3,lastRowTracker+3);
    var walkname = sht.getRange(lastRowTracker + 3, 2).getValue();
    var date = sht.getRange(lastRowTracker + 3, 4).getValue(); 
    var stage = sht.getRange(lastRowTracker + 3, 5).getValue(); 
    
    var teachernamesdata = tracker.getRange(2, 2, lastRowTracker, 1).getValues();
    
    for(var i = 0; i < teachernamesdata.length; i++){
    var teachname = teachernamesdata[i];
    
    if(teachname == walkname) then copy date to cell in same row as teachname with         
    corresponding stage
    
    if(teachname != walkname) then add walkname to end of list and copy date to the cell in     
    the same row with corresponding stage
    

    请记住,当您发布代码回复时,我是新手。我知道我所做的一些事情可能效率低下而且不正确,但我正处于学习过程中。

1 个答案:

答案 0 :(得分:-1)

经过多个小时的试验和错误,我已经能够在名称预先填充并清理代码时使其工作。现在我必须弄清楚如何将名称添加到列表末尾,如果它是一个新名称,与其他东西相比应该很容易。

新代码

function copyLastRowtoTracker() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses");
var lastRow = ss.getLastRow(); 
var name = ss.getRange(lastRow,1,1,5); 

var sstracker = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tracker");
var sstrackerLastRow = sstracker.getLastRow() 

name.copyValuesToRange(sstracker,1,5,sstrackerLastRow+3,sstrackerLastRow+3);
var walkname = sstracker.getRange(sstrackerLastRow + 3, 2).getValue();
var date = sstracker.getRange(sstrackerLastRow + 3, 4).getValue(); 
var stage = sstracker.getRange(sstrackerLastRow + 3, 5).getValue(); 

var teacherarray = sstracker.getRange(2, 2, sstrackerLastRow, 1).getValues();
var stagearray = sstracker.getRange(1, 1, 1, 12).getValues(); 


for(var i = 0; i < teacherarray.length; i++){
  var teachname = teacherarray[i];
    if(teachname == walkname){

      for(var r = 0; r < 12; r++){
        var stagename = stagearray[0][r];
          if(stagename == stage){
      var row = sstracker.getRange(i + 2, r + 1).setValue(date).setBackground('Green');
    }
   }
  }
 }
  var removeLastRow = sstracker.getLastRow();
  var range = sstracker.getRange(removeLastRow, 1, 1, 12);
  range.clear();``

 }