Google Script可将行复制到另一个点,并允许编辑复制数据

时间:2014-07-22 14:25:30

标签: google-apps-script google-sheets spreadsheet

我有一个填充主电子表格的表单,我还有另一个从主表格中获取数据的电子表格。使用下面的脚本,我无法编辑复制的信息,因为每当脚本运行时,它都会替换已编辑的信息以匹配主表。如果没有输入数据,我怎样才能让脚本只复制数据。

ColumnQ的数据永远不会改变。

function myFunction() {
  var source = SpreadsheetApp.openById('XXX');
    var sourcesheet = source.getSheetByName('Lead Sheet');


    var target = SpreadsheetApp.openById('XXX')
    var targetsheet = target.getSheetByName('Lead Sheet');
    var targetrange = targetsheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn());
    var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues();
    targetrange.setValues(rangeValues);


}

1 个答案:

答案 0 :(得分:0)

你的意思是你只想复制来自" master"的新行。表格中已经没有"目标"片?如果是这样,假设列Q与您的"唯一键一样,"那么你必须从每张纸上至少拉出这一列并比较结果。这里有一些经过测试的代码可以完成我认为你想要的代码:

function myFunction() {
  var qOffset = 16;
  var ss = SpreadsheetApp.openById('');
  var sourceSheet = ss.getSheetByName('Source');
  var targetSheet = ss.getSheetByName('Target');

  var sourceValues = sourceSheet.getDataRange().getValues();
  var targetValues = targetSheet.getDataRange().getValues();
  var deltaValues = [];

  for(var i = 0 ; i < sourceValues.length ; i++){
    var rowsMatch = false;

    for(var j = 0 ; j < targetValues.length ; j++){
      if(sourceValues[i][qOffset] == targetValues[j][qOffset]){
        rowsMatch = true;
        break;
      }
    }

    if(!rowsMatch){
      deltaValues.push(sourceValues[i]);
    }
  }

  if(deltaValues.length > 0){
    targetSheet.getRange(targetSheet.getLastRow() + 1, 1, deltaValues.length, deltaValues[0].length).setValues(deltaValues);
  }
}

另外,我最近刚刚处理了一个类似的项目,但没有使用&#34; master&#34;表,我写了一个由表单提交触发的函数。调用该函数时,它会在我唯一的电子表格中搜索数据;如果它找到它,它会更新该行,如果没有,它会追加一个新行。如果您对此感兴趣,我可以发布部分源代码。