[英]How do I Merge Column Values in Google Sheets with Google Apps Script
我知道这个问题与此相似。 我很伤心地说,我只是不知道够遵循一个。
我也认识到它与Google教程非常相似,但是他们正在创建一个新数组,我需要组合数组。
问题
我正在尝试从易失性列表中创建一个永久列表。 永久列表将每天更新。 我需要脚本在一张纸上查找重复项,并将所有新内容复制到另一张纸上。 我很确定我的问题主要出在我的逻辑上。
我一直在努力寻求所有类似的答案(提出来),我只是想不通。 下面有更多解释。
代码
function updateRoster() {
var ss = SpreadsheetApp
.openById("15DRZRQ2Hcd7MNnAsu_lnZ6n4kiHeXW_OMPP3squbTLE");
var data = ss
.getSheetByName("Volatile Data")
.getDataRange()
.getValues();
var saveData = ss
.getSheetByName("All Data")
.getDataRange()
.getValues();
for (i in data) {
var value = data[i][3];
for (j in saveData) {
var search = saveData[j][3]
if(value == search) {
Logger.log(data[i][3]);
}
}
}
}
我在日志中得到这个:
[PDT 16-03-24 06:35:44:914] 1.00000006E8
[PDT 16-03-24 06:35:44:916] 1.00000012E8
[PDT 16-03-24 06:35:44:918] 1.00000022E8
这是正确的,这些都是重复的,但我需要选择每隔一行。 那些不是重复的。
我尝试了很多更改,但只是不断重复第二张工作表的列表。 请帮忙。
简单地将value == search
替换为value != search
行不通的,因为即使saveData
中的行之一不同,也会将行添加到第二张表中。 但是它需要检查所有行是否都不同。
如果您确定易失性数据表中没有重复项,则可以通过以下方式进行操作:
var saveSheet = ss.getSheetByName("All Data");
loopThroughData:
for (i in data) {
var value = data[i][3];
for (j in saveData) {
var search = saveData[j][3]
if(value === search) continue loopThroughData;
//here we leave the inner loop and jump back to the top if
//even one row is equal
}
saveSheet.appendRow(data[i]);
}
编辑:但是,通常最好使用函数,而不是continue
和标签的组合。 因此,我更喜欢这种解决方案:
function updateRoster() {
...
function areThereDuplicates(i) {
var value = data[i][3];
for(var j in saveData) {
if(saveData[j][3] === value) return true;
}
return false;
}
for (i in data) {
if(!areThereDuplicates(i)) saveSheet.appendRow(data[i]);
}
}
要获得每个其他值,您可以检查每行不同或“新”的值
if(value != search) {
Logger.log(data[i][3]);
}
并简单地将新行添加为文件
if(value != search) {
Logger.log(data[i][3]);
ss.getSheetByName("All Data").appendRow(data[i]);
}
祝你好运=)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.