@Vadim1411

Как вывести значения по условию в таблицу?

Есть следующая задача: вывести в ячейки таблицы значение "1" при условии, что значения в диапазоне А2:С4 будут совпадать с значениями в диапазоне строки D1:L1. При всем при этом "1" должна быть выведена в диапазоне D2:L4 в той же строке, что и искомые значения диапазона А2:С4 и в той же колонке, что и искомые значения диапазона D1:L1. Прилагаю скрин таблицы, как это должно выглядеть.628a5813338c6302001604.jpeg

Так же прикладываю последнюю из наверное 50 вариаций кода.

function getAndSetDate() {

  let app = SpreadsheetApp;
  let ss = app.getActiveSpreadsheet();
  let namess = ss.getSheetByName("ТЕСТ");

  let lastRow = namess.getLastRow();
  let lastColumn = namess.getLastColumn();
  let dateRow = namess.getRange(1, 4, 1, lastColumn-3).getValues();
  let dateColumn = namess.getRange(2, 1,lastRow-1, lastColumn-9).getValues();
  let dateEmpty = namess.getRange(2, 4, lastRow-1, dateRow[0].length).getValues();


  let one = 1;
  let nan = '';
  let idxDateRow = 0;
  let idxDateEmpty = 0;
  let idxDateRow2 = 0;
  let idxDateEmptyRow = 0;

  for(let row = 0; row < dateColumn.length; row++){
    for(let col = 0; col < dateColumn[0].length; col++){
      for(let drow = 0; drow < dateRow.length; drow++){
        for(let dcol = 0; dcol < dateRow[0].length; dcol++){
          for(let derow = 0; derow < dateEmpty.length; derow++){
            for(let decol = 0; decol < dateEmpty[0].length; decol++){
              dateEmpty[derow].forEach((deelem, deindex) =>{
                dateRow[drow].forEach((delem,dindex) =>{
                  if(dateColumn.indexOf(idxDateRow) == dateEmpty.indexOf(idxDateEmpty) && dateColumn[row][col] == dateRow[drow][dcol] && deindex == dindex){
                    dateEmpty[derow][decol] = one;
                  }else{
                    dateEmpty[derow][decol] = nan;
                  };
                });
                idxDateRow +=1;
                idxDateEmpty +=1;
                idxDateEmptyRow +=1;
                idxDateRow2 +=1;
              });
            };
          };
        };
      };
    };
  };
  console.log(dateEmpty);

};
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Дубликат https://ru.stackoverflow.com/q/1412667/178725. Не создавайте множество тем на разных ресурсах - это нехорошо.

Довольно странное задание. Попробуйте обрабатывать как сплошной массив разнородных данных.

function myFunction() {
  const book = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = book.getSheetByName('Лист');
  const range = sheet.getRange('A1:L4');
  const values = range.getValues();
  range.setValues(calculate_(values));
}

/**
 * @param {any[][]} values
 * @returns {any[][]}
 */
function calculate_(values) {
  return values.map((row, i) => {
    const collection = row.slice(0, 3);
    return row.map(((cell, j) => {
      if (i < 1 || j < 3) return cell;
      const header = values[0][j];
      return collection.includes(header) ? 1 : '';
    }));
  });
}


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

Пример в Таблице https://docs.google.com/spreadsheets/d/1paJxOTNK01...

628b8be3ac80a500865027.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы