【发布时间】:2018-09-12 06:27:31
【问题描述】:
我的情况与question 中描述的情况类似:两个工作表,输入数据使用 importxml 函数进入 Feed 工作表和一个 Data由于设置为每天运行的脚本,新行被复制的工作表。
但是,当前脚本正在创建每日副本。因此,我想修改上述问题中提供的答案,以便脚本检查 F 列上的 ID,并仅复制具有新 ID 的行。
我应该如何将下面创建哈希的部分更新为在 F 列上查找 ID 的部分?我的行也是一致的,所以假设我可以在最后删除相关的代码行是否正确?
可通过here 获取示例 Google 表格。
function appendUniqueRows() {
var ss = SpreadsheetApp.getActive();
var sourceSheet = ss.getSheetByName('Get Data');
var destSheet = ss.getSheetByName('Final Data');
var sourceData = sourceSheet.getDataRange().getValues();
var destData = destSheet.getDataRange().getValues();
// Check whether destination sheet is empty
if (destData.length === 1 && "" === destData[0].join('')) {
// Empty, so ignore the phantom row
destData = [];
}
// Generate hash for comparisons
var destHash = {};
destData.forEach(function(row) {
destHash[row.join('')] = true; // could be anything
});
// Concatentate source rows to dest rows if they satisfy a uniqueness filter
var mergedData = destData.concat(sourceData.filter(function (row) {
var hashedRow = row.join('');
if (!destHash.hasOwnProperty(hashedRow)) {
// This row is unique
destHash[hashedRow] = true; // Add to hash for future comparisons
return true; // filter -> true
}
return false; // not unique, filter -> false
}));
// Check whether two data sets were the same width
var sourceWidth = (sourceData.length > 0) ? sourceData[0].length : 0;
var destWidth = (destData.length > 0) ? destData[0].length : 0;
if (sourceWidth !== destWidth) {
// Pad out all columns for the new row
var mergedWidth = Math.max(sourceWidth,destWidth);
for (var row=0; row<mergedData.length; row++) {
for (var col=mergedData[row].length; col<mergedWidth; col++)
mergedData[row].push('');
}
}
// Write merged data to destination sheet
destSheet.getRange(1, 1, mergedData.length, mergedData[0].length)
.setValues(mergedData);
}
我是这个 Google Apps 脚本世界的新手,所以如果我遗漏了任何重要信息,请告诉我。提前感谢您的帮助。
【问题讨论】:
-
我可以问你关于你的问题吗? 1. 共享电子表格中的脚本与您的问题中的脚本有什么区别?因为在您的共享电子表格中找不到
Get Data和Final Data的工作表。 2. 当Feed工作表中的值被复制到Data工作表中时,您希望不重复ID。我的理解正确吗? -
感谢您查看@Tanaike。共享 Google 工作表上的脚本仅将行从
Feed工作表复制到Data工作表,所以我想用我的问题中的类似内容替换它,只复制不是的新行已根据 F 列中的 ID 保存到Data工作表中。 -
感谢您的回复。根据您的评论,我发布了答案。你能确认一下吗?如果我误解了你的问题,请告诉我。我想修改它。
-
我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,请随时告诉我。我想学习解决你的问题。
标签: javascript google-apps-script google-sheets