0

我对谷歌应用程序脚本相对较新,并且正在慢慢地构建脚本。请,如果您给出答案,请尽量使答案尽可能简单,以便我了解发生了什么。我正在尝试做的事情。

  1. 我们的管理员必须为大楼中的每位教师完成 8 个评估过程,我正在尝试构建一个电子表格,该电子表格将根据通过谷歌表格提交的数据对其进行跟踪。
  2. 我将表单响应表上最后一行提交数据的前五列复制到跟踪表。(在我弄清楚这一切之后可能不必这样做。)数据包括时间戳、姓氏、名字、日期、阶段。

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

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

跟踪表中的数据

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

请记住,当您发布代码响应时,我对此并不陌生。我知道我所做的一些事情可能效率低下且不正确,但我正在学习过程中。

4

1 回答 1

-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();``

 }
于 2013-11-29T05:55:07.227 回答