Скрипт Google l oop проверка дубликатов перед записью данных - PullRequest
0 голосов
/ 27 мая 2020

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

Идентификатор элемента (JSON формат), данные, которые читается, имеет форму:

[timestamp number text1 text2]

, и эти детали дублируются в разных идентификаторах в a для l oop.

То, что у меня осталось на листе, находится в каждой строке (по одному элементу в каждой ячейке):

timestamp(id1) number1(id1) text1(id1) text2(id1) timestamp(id2) number1(id2) text1(id2) text2(id2) timestamp(id3) number1(id3)...etc

каждая строка будет содержать только одно значение для метки времени, однако переменная метки времени записывается несколько раз. Можно ли адаптировать мой сценарий для проверки столбца A нижней строки на моем листе и записи новой строки только в том случае, если метка времени в текущей нижней строке отличается от метки времени в новой строке, которая должна быть записана.

for l oop выполняет итерацию по файлу json и сохраняет данные в переменной «values».

{
 {.....
  let values = [];
  values.push(timestamp, number1, text1, text2); //final line of for loop
 }
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
  var range = ss.getRange(3, 1, 1, values.length);  
  if (range.isBlank()) {  
    range.setValues([values]);
  } else {
    ss.appendRow(values);
  }
}

2 Запросы:

a) Я бы хотел, чтобы переменная timestamp только быть записано один раз в столбце A.

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

Спасибо

1 Ответ

1 голос
/ 27 мая 2020

Итак, для запроса A: вам нужно изменить массив, который вы передаете методу setValues(). Если вы уже знаете, какие это столбцы, вы можете изменить массив, заменив существующее значение пустой строкой.

const outputRow = [ … ]; // This is where your current output is set
const emptyTheseColumns = [3, 6, 9]; // columns C, F, I

const cleanedOutputRow = outputRow.map( (item, index) => {
  const column = index + 1; // columns start at 1, index at 0

  // return empty string for stated columns 
  if( emptyTheseColumns.indexOf( column ) != -1){
    return ""
  }
  // otherwise return the current value
  return item
});

// then use the new array in setValues( cleanedOutputRow )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...