Google Scripts: тестирование, если значение уже существует в строке листов Google - PullRequest
0 голосов
/ 14 декабря 2018

Я новичок в Google Scripts и пытаюсь добавить данные в Google Sheet только в том случае, если это значение еще не существует в строке.Следующий код всегда добавляет данные в строку (это работает и работает):

function doPost(e){
  return handleResponse(e);
}

function handleResponse(e) {
  var lock = LockService.getPublicLock();
  lock.waitLock(30000);  // wait 30 seconds before conceding defeat.
  try {
// set where I write the data
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = doc.getSheetByName(SHEET_NAME);
var column = sheet.getRange("A:A");  // like A:A
var values = column.getValues(); 
var addToSheet = false;
// header row is 1st row
var headRow = e.parameter.header_row || 1;
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1; // get next row
var row = []; 
// loop through the header columns
for (i in headers){
  if (headers[i] == "Timestamp"){ 
    // special case if you include a 'Timestamp' column
    row.push(new Date());
  } else { 
    // else use header name to add to the array of values to add
    row.push(e.parameter[headers[i]]);
  }
}
// set all values at once
  sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);

// return json success results
return ContentService
      .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
      .setMimeType(ContentService.MimeType.JSON);
} catch(e){
// if error return json error
return ContentService
      .createTextOutput(JSON.stringify({"result":"error", "error": e}))
      .setMimeType(ContentService.MimeType.JSON);
  } finally { 
    //release lock
    lock.releaseLock();
  }
}

Я знаю, что мне нужно добавить что-то вроде

if(!values.includes(e.parameter[headers[i]][j])){       
    row.push(e.parameter[headers[i]]);
}

Чтобы проверить, переданы ли какие-либо значенияв уже существует в строке, но это не работает в Google Scripts.Любой совет?Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете прочитать значения строки как строку, а затем проверить индекс искомого значения.Если его там нет, индекс будет -1.

Если вы проверяете числа, я бы предложил преобразовать valueToCheckFor в строку.(Хотя я не проверял, нужно ли это, и не мог сказать вам, что у меня в голове)

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

var stringValues = valuesToCheck.toString();
//The row values become a comma-separated string.

var stringExists = stringValues.indexOf(',' + valueToCheckFor + ',') > -1;
//check if value exists in string
//commas added to ensure whole cell is matched
//without commas, searching for 'dog' will match cells containing 'dogs', 'dogo', 'corn dog', etc.

if(!stringExists) {       
    row.push(valuesToPush);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...