Сравните строки в двух листах Google, как только совпадение найдено, измените цвет шрифта - PullRequest
1 голос
/ 09 ноября 2019

Я пытаюсь создать два листа: Лист 1: шаблон, в который студент вводит перевод слова в ячейку;Лист 2: ключ, который проверяет его по всем возможным ответам: эти два листа выглядят так:

Вот ссылка, чтобы показать две таблицы

Я пытаюсьвзять предоставленный ответ для каждого столбца в шаблоне (A: 1) и сопоставить его со всеми возможными ответами, перечисленными в соответствующем столбце в ключе (если он соответствует чему-либо между A: 1: A: 3 в ключе). Если есть совпадение, шрифт должен измениться на зеленый, и он должен перейти к следующему столбцу. Если совпадений нет, шрифт становится красным, прежде чем перейти к следующему столбцу.

Я запустил регистратор, и похоже, что он корректно просматривает данные с каждого листа. Кажется, проблема в сравнении двух столбцов.

  var ui = SpreadsheetApp.getUi();
  var ssA= SpreadsheetApp.getActiveSpreadsheet();
  var worksheet = ssA.getSheetByName("Worksheet"); 
  var rangeData = worksheet.getDataRange();
  var lastColumn = rangeData.getLastColumn();
  var lastRow = rangeData.getLastRow();
  var searchRange = worksheet.getRange(2, 2, lastRow-1, lastColumn-1);

  var ssB = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1jKuxXo6o5YJjSUrQmaHR0n1ydvw7PgUl29I9mtycF_g/edit#gid=0");
  var worksheetB = ssB.getSheetByName("Key");
  var rangeDataB = worksheetB.getDataRange();
  var lastColumnB = rangeDataB.getLastColumn();
  var lastRowB = rangeDataB.getLastRow();
  var searchRangeB = worksheetB. getRange(2, 2, lastRowB -1, lastColumnB -1);

  function onOpen(){
  ui.createMenu("Check My Translation.")
    .addItem("Check Set 1", "transcheck")
    .addToUi()
function transcheck(){   

//iterate through the two corresponding columns in template and reference sheet  
      for (i = 1; i < lastColumn; i++){
      for (j = 1; j < lastRow; j++){
//create the ranges to be compared and store as vars. cell and cellB          
          var cell = searchRange.getCell(j,i).getValue();
          var cellB =  searchRangeB.getCell(j,i).getValue();
//check for matches, change font accordingly           
             if (cell[0] === cellB[0]){
                  worksheet.getRange(j+1,i+1).setFontColor("green");
            }else if(cell[0] =! cellB[0]){
                  worksheet.getRange(j+1,i+1).setFontColor("red");

Я не получаю никаких сообщений об ошибках;он просто не соответствует ячейкам / правильно меняет цвета.

1 Ответ

1 голос
/ 11 ноября 2019

В конце кода отсутствует несколько }, и правильный оператор - != вместо =!. Кроме того, как упомянул пользователь, функция getValue () извлекает одно значение, а не массив как getValues ​​() [1], что является рекомендуемой функцией в этом случае, чтобы избежать попадания в квоты Google [2]:

function onOpen(){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Check My Translation.")
  .addItem("Check Set 1", "transcheck")
  .addToUi()
}

function transcheck(){   
  var ssA= SpreadsheetApp.getActiveSpreadsheet();
  var worksheet = ssA.getSheetByName("Worksheet"); 
  var rangeData = worksheet.getDataRange();
  var lastColumn = rangeData.getLastColumn();
  var lastRow = rangeData.getLastRow();
  var searchRange = worksheet.getRange(2, 2, lastRow-1, lastColumn-1).getValues();

  //var ssB = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1A6RjjlOSQ7zRBYEJUhakv3IyqT-R44XcnFrBW0DFfZk/edit");
  var worksheetB = ssA.getSheetByName("Key");
  var rangeDataB = worksheetB.getDataRange();
  var lastColumnB = rangeDataB.getLastColumn();
  var lastRowB = rangeDataB.getLastRow();
  var searchRangeB = worksheetB. getRange(2, 2, lastRowB -1, lastColumnB -1).getValues();
  //iterate through the two corresponding columns in template and reference sheet  
  for (var i = 0; i < searchRange.length; i++){
    for (var j = 0; j < searchRange[0].length; j++){
      //create the ranges to be compared and store as vars. cell and cellB          
      var cell = searchRange[i][j];

      var k = 0;
      while(k<3) {
        var cellB =  searchRangeB[i+k][j];
        //check for matches, change font accordingly           
        if (cell == cellB){
          worksheet.getRange(i+2,j+2).setFontColor("green");
          break;
        }else if(cell != cellB){
          worksheet.getRange(i+2,j+2).setFontColor("red");
        }
        k++
      }
    }
  }
}

[1] https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()

[2] https://developers.google.com/apps-script/guides/services/quotas

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...