如何在不覆盖空白单元格的情况下更新基于 ID 的另一张纸上的行?



我正在尝试使用 Google Apps 脚本将行从一张工作表复制到另一张工作表,基于每列第 4 列中的匹配 ID,但我似乎找不到如何将其粘贴到匹配行中并在不用空白单元格覆盖现有数据的情况下执行此操作。

在 Google 表格中,Sheet1 包含由 ID 定义的新数据行。Sheet2 应收集每一行,如果 Sheet1 上新行的 ID 与 Sheet2 上的现有行匹配,则使用新数据更新行。在一天结束时,Sheet1 被清除,剩下的就是 Sheet2 中每个 ID 项的最新信息。有时 Sheet1 上的行没有完全填充,在这种情况下,只有带有数据(来自 Sheet1)的单元格应该在 Sheet2 上被覆盖。

将附加新的ID,但我已经或多或少地解决了如何做到这一点,这不是问题的一部分:)

function myFunction() {
// Path to Correct Spreadsheet
var ss = SpreadsheetApp.getActive();
var sheet1 = ss.getSheetByName("Sheet1");
var sheet2 = ss.getSheetByName("Sheet2");
var sheet3 = ss.getSheetByName("Sheet3"); //temporary, while I work out how to copy it to the right row in Sheet2
// Get size of ranges
var header = 1;  // Number of rows of header info (to skip)
var range1 = sheet1.getDataRange();
var data1 = range1.getValues();
var range2 = sheet2.getDataRange();
var data2 = data2 = range2.getValues();
Logger.log('data1 = ' + data1);
var resultArray = [];
for(var n=header; n < data1.length ; n++){
var keep = false;
for(var p=header; p < data2.length ; p++){
Logger.log(data1[n][0]+' =? '+data2[p][0]);
if( data1[n][3] == data2[p][3]){
resultArray.push(data1[n]);
Logger.log('true');
break ;
}
}
}  
sheet3.getRange(+1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
}

我已经设法拼凑了找到匹配 ID 的代码,并将整行发送到 Sheet3(现在,在研究如何将其发送到 Sheet2 中的右行之前)。但是这会用空白单元格(如果有的话)覆盖任何现有数据,而且我似乎无法使 {contentOnly: true} 工作(这甚至是正确的方法吗?

我只做了一个星期,努力了,但超出了我的深度。任何帮助,即使只是指向要学习的主题的正确方向的指针,也将不胜感激。在过去的 48 小时内,我一直生活在 stackoverflow 上,试图找到与此类似的东西,但我找不到任何东西(也许我什至没有搜索正确的东西!非常惭愧。

试试这个:

function myFunction() {
var ss = SpreadsheetApp.getActive();
var sheet1 = ss.getSheetByName("Sheet1");
var sheet2 = ss.getSheetByName("Sheet2");
var sheet3 = ss.getSheetByName("Sheet3");
var header = 1;  // Number of rows of header info (to skip)
var range1 = sheet1.getDataRange();
var data1 = range1.getValues();
var range2 = sheet2.getDataRange();
var data2 = data2 = range2.getValues();
var resultArray = [];
for(var n=header; n < data1.length ; n++){
var keep = false;
for(var p=header; p < data2.length ; p++){
if( data1[n][3] == data2[p][3]){
var tA=[];
var rg=sheet2.getRange(p+1,1,1,sheet2.getLastColumn());
for(var i=0;i<data1[0].length;i++) {
tA.push((data1[n][i])?data1[n][i]:data2[p][i]);
}
rg.setValues([tA]);
break ;
}
}
}  
}

相关内容

最新更新