Как сделать массив данных со значениями и формулами - PullRequest
0 голосов
/ 21 мая 2019

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

Я думаю, что мне нужно сделать данные электронной таблицы в виде массива, а не просто использовать getValues. Прошло много времени с тех пор, как я должен был создать массив, поэтому я борюсь с лучшим способом сделать это. Мне понадобятся циклы для заполнения массива и операторы if, чтобы получить значения или формулы в зависимости от строки.

Вот код удаления дубликатов, который удаляет строки, если ячейка в столбцах A и B соответствует другой строке:

/**
 * Removes duplicate rows from the current sheet.
 */
function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = [];

  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if(row[0] == newData[j][0] && row[1] == newData[j][1]){
        duplicate = true;
      }
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

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

Изменить: Этот вопрос был решен с помощью ответа на другой вопрос. Контексты вопросов не совпадают, и другой вопрос не был обнаружен ни в одном из моих исследований, поэтому я считаю, что мой вопрос не является дубликатом.

1 Ответ

0 голосов
/ 21 мая 2019

Благодаря комментарию TheMaster я смог решить эту проблему. Вот оригинальный учебник «Удалить дубликаты» , а вот вопрос, который TheMaster направил мне на , чтобы найти решение.

Мой окончательный код:

/**
 * Removes duplicate rows from the current sheet.
 */
function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();
  var newData = [];

  var data = range.getValues();
  data = range.getFormulas().map(function(e, i) {//i=index of row(e)
    return e.map(function(f, j) {//j = index of column(f)
      return f === "" ? data[i][j] : f;
    });
  });

  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var j in newData) {
      if(row[0] == newData[j][0] && row[1] == newData[j][1]){
        duplicate = true;
      }
    }
    if (!duplicate) {
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...