Google Sheets - выделите ячейку, если значение существует на другом листе - PullRequest
0 голосов
/ 17 февраля 2020

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

Предлагаемое решение

FOR EACH row in 'sheet1'

IF column C == TRUE 
&& column D (value split by comma, only search values with 'tf' in) does not match any cell in 'sheet2'

Highlight the cell Red

Пример значения

CELL D9

"Платформа, платформа TF, пользователь TF"

  1. Не выполнять поиск "Платформа" в листе2
  2. Поиск «Платформа TF» в листе2
  3. Поиск «Пользователь TF» в листе2

Пример листа

https://docs.google.com/spreadsheets/d/1eI9FTVNuyMEzQTJnHzufz_gElE53AMmk-mxVEWKPdRk/edit?usp=sharing

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Вы можете сделать следующее в скрипте приложений:

  • Получить значения из sheet1 (столбцы C, D) с помощью getRange и getValues ​​. Для каждой строки выполните следующее:
  • Проверьте, установлен ли флажок в столбце C.
  • Получите массив с разделенными запятыми значениями из столбца D и отфильтруйте их так, чтобы только те которые содержат TF хранятся. String.prototype.split () и Array.prototype.filter () используются для этого.
  • Получение массива со значениями из sheet2 (столбец E) с getRange и getValues ​​.
  • Убедитесь, что любое значение из первого массива (значения, разделенные запятыми из столбца D) соответствует любому значению из второго массива (значения из sheet2) с Array.prototype.some () .
  • Если совпадение найдено, используйте setBackground (color) , чтобы изменить цвет фона ячейки.

Это может быть что-то вроде следующего:

function highlightCells() {
  var ss = SpreadsheetApp.getActive();
  var sheet1 = ss.getSheetByName("sheet1");
  var sheet2 = ss.getSheetByName("sheet2");
  // Get the values from sheet1 (column C, D):
  var firstRow = 1;
  var firstCol = 3;
  var numRows = sheet1.getLastRow() - firstRow + 1;
  var numCols = 2;
  var originValues = sheet1.getRange(firstRow, firstCol, numRows, numCols).getValues();
  // Iterate through each row in sheet1:
  originValues.forEach(function(row, i) {
    var checkbox = row[0];
    if (checkbox === true) { // Check that checkbox in column C is checked
      var cellValue = row[1];
      // Get the comma-separated values in column D (only if the contain `TF`, capitalized):
      var values = cellValue.split(",").filter(function(value) { 
        return value.indexOf("TF") !== -1;
      });
      // Get the values from sheet2:
      var firstRow2 = 1;
      var column = 5;
      var numRows2 = sheet2.getLastRow() - firstRow2 + 1;
      var valuesSheet2 = sheet2.getRange(firstRow2, column, numRows2).getValues().map(function(value) { 
        return value[0];
      });
      // Look for any comma-separated value in column D (sheet1) that matches a value in column E (sheet2):
      var found = values.some(function(value) { 
        return valuesSheet2.indexOf(value) > -1;
      });
      // If any value matches, change background color in to red:
      if (found) {
        sheet1.getRange(i + firstRow, 4).setBackground("red");
      }
    }
  });
}

Я не уверен, хотите ли вы установить цвет фона, если значение соответствует o, не соответствует ли оно (это не ясно в вашем вопросе). Это меняет цвет фона, если значение соответствует . Если вы хотите, чтобы оно изменилось, если оно не соответствует , вам следует сделать следующее: if (!found) {.

Ссылка:

0 голосов
/ 17 февраля 2020

Вы можете использовать функцию MATCH для поиска других листов.

, например: =NOT(ISERROR(MATCH(D1,'SheetName'!C:C,0))) Поиск значения D1 в столбце [SheetName] столбец C

...