我有一个填充主电子表格的表单,我还有另一个从主表格中获取数据的电子表格。使用下面的脚本,我无法编辑复制的信息,因为每当脚本运行时,它都会替换已编辑的信息以匹配主表。如果没有输入数据,我怎样才能让脚本只复制数据。
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);
}
答案 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;表,我写了一个由表单提交触发的函数。调用该函数时,它会在我唯一的电子表格中搜索数据;如果它找到它,它会更新该行,如果没有,它会追加一个新行。如果您对此感兴趣,我可以发布部分源代码。