Сравнение данных и запись данных ячеек на основе результатов

Я относительно новичок в скрипте приложений Google и медленно работаю над созданием скрипта. Пожалуйста, если вы дадите ответ, постарайтесь, чтобы ответ был как можно более простым, чтобы я мог понять, что происходит. Что я пытаюсь сделать.

  1. Наши администраторы должны выполнить 8 этапов процесса оценки для каждого учителя в здании, и я пытаюсь создать электронную таблицу, которая будет отслеживать его на основе данных, отправленных через форму Google.
  2. I Копирую первые пять столбцов последней строки представленных данных на листе ответов формы на лист отслеживания. (Возможно, этого не потребуется делать после того, как я все это выясню.) Данные включают метку времени, фамилию, имя, дату, этап.

  3. Здесь все усложняется. Я хочу сравнить фамилию импортированных данных с фамилией листа трекера. Если фамилии нет, добавьте ее в конец списка и укажите дату в строке как соответствующий этап сопоставления. Если есть фамилия, укажите дату в той же строке, соответствующей стадии сопоставления.

  4. В приведенном ниже примере видно, что выбрана фамилия Смит. Поскольку Смит находится в списке, укажите дату 01.01.2014 в столбце «Прохождение 2». По мере того, как администраторы продолжают процесс оценки, в список будут добавляться другие учителя, и он будет расти вправо, заполняя даты, в которые была проведена эта часть оценки.

Данные в листе трекера

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

Помните, что я новичок в этом, когда вы публикуете ответы с кодом. Я знаю, что некоторые вещи, которые я сделал, вероятно, неэффективны и неправильны, но я учусь.


person HarrisCountyBOE    schedule 26.11.2013    source источник


Ответы (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();``

 }
person HarrisCountyBOE    schedule 29.11.2013