我在尝试使我的脚本工作时遇到麻烦,并且想知道是否有人可以帮助我解决这个问题。
我正在Google表格中处理一个简单的脚本,如果两行的A,B,C,E和F列相同,它将覆盖一行中的D列单元格。示例表的屏幕截图可以看到here。第2行是基于原始保留进行的,其中A-F列由外部程序填充,而G和H列随后由Appsheet填充。如果保留状态更改,则外部程序将创建一个新行,其中A-F列具有更新的D单元格。我的想法是要有一个脚本,该脚本将根据以下条件将D2替换为D3并删除第3行:
我已经尝试将脚本基于重复的删除脚本,但是作为输出,它删除了“已更新”行而不替换原始D单元格。任何帮助将不胜感激!
//overwrite old rows with updated rows
function update() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var update = false;
for(j in newData){
if(row.slice(0,2).join() == newData[j].slice(0,2).join() && row.slice(4,5).join() == newData[j].slice(4,5).join() && row.slice(3).join() !== newData[j].slice(3).join() ){
update = true;
}
}
if(!update){
newData.push(row);
}
}
// Clear the existing info and update with newData.
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
假设:
D2
和D3
不匹配,则要将D3
的值复制到D2
并删除第3行。如果所有这些都正确,则可以尝试以下方法:
function update() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var original = data[1];
var updated = data[2];
// Checking that values match:
if (original[0] == updated[0] && original[1] == updated[1] && original[2] == updated[2] && original[4].getTime() == updated[4].getTime() && original[5].getTime() == updated[5].getTime() && original[3].toLowerCase() != updated[3].toLowerCase()) {
sheet.getRange("D2").setValue(updated[3]);
sheet.deleteRow(3);
}
}
[请注意,要比较E和F列中的值,应使用getTime()或valueOf()(否则这些条件将返回false
。
我希望这会有所帮助。