根据行单元格值的出现复制或更新行

时间:2018-06-25 13:03:34

标签: google-apps-script

我正在尝试根据行数据中的特定值添加给定行或将现有行更新为Google表格。我的行数据表示为数组对象,例如:[id, number, date, type, url, count]

我期望的是,如果存在具有匹配的number的行,那么我会在Google表格的相同范围中将count递增1,否则我用行数据添加了新行。

这是到目前为止我尝试过的方法,但是它仅适用于count = 2,而不能超过此值。

function copyRowBasedOnNumber(sheetId, sheetName, rowData) {
  var sheet = SpreadsheetApp.openById(sheetId);
  var sheetname = sheet.getSheetByName(sheetName);
  var count = 0;
  var matchingRow = sheetname.getLastRow();
  var values = sheetname.getDataRange().getValues();
  for (var row in values) {
    for (var col in values[row]) {
      if (values[row][col] == rowData[1]) { // rowData[1] corresponds to the number
        matchingRow = row;
        count++;
        break;
      }
    }
  }
  if(count == 0) {
    var lastRowNum = sheetname.getLastRow();
    sheet.insertRowAfter(lastRowNum);
    rowData[5] = 1;
    sheetname.getRange(lastRowNum + 1, 1, 1, rowData.length).setValues([rowData]);
  } else {
    sheetname.getRange(parseInt(matchingRow) + 1, 6).setValue(count + 1);
  }
  return count + 1;
}

1 个答案:

答案 0 :(得分:0)

我知道了。万一这对将来的人有帮助,这里是代码。在这里,count是在添加新条目或更新现有条目之前要检查的值。

function copyRowToSheetWithoutDuplicate(sheetId, tabName, rowData) {
  var sheet = SpreadsheetApp.openById(sheetId);
  var sheetname = sheet.getSheetByName(tabName);
  var count = 0;
  var existingCount = 0;
  var existingEntryRow = 0;
  var allValues = sheetname.getDataRange().getValues();
  var numColumns = sheetname.getLastColumn();
  var numRows = sheetname.getLastRow();
  for(var i=0;i<numRows;i++) {
    var dateFromRowData = rowData[3].substring(0,10);
    var todayDate = Utilities.formatDate(new Date(), "GMT+05:30", "''yyyy-MM-dd");
     if(allValues[i][1]==rowData[1] && dateFromRowData!=todayDate) {
       count++;
       existingCount = allValues[i][6];
       existingEntryRow = i + 1;
       break;
   }
  }
  if(count == 0) {
    // insert a row and make an entry
    sheetname.insertRowAfter(numRows);
    rowData.push(1); // count
    sheetname.getRange(numRows + 1, 1, 1, rowData.length).setValues([rowData]);
    return 1;
  } else {
    // update the existing count by incrementing it by 1
    existingCount++;
    rowData.push(existingCount); // count
    sheetname.getRange(existingEntryRow, 1, 1, rowData.length).setValues([rowData]);
    return existingCount;
  }
}