长期用户,第一次来电。我最近创建了帐户并且很喜欢这个网站提供的帮助,所以我想我会寻找一些我自己的。
所以我已经能够解析两张纸(“抓取”和“复制”),并更新已更改的日期。 (“Grab”收集新数据并复制到电子邮件脚本所在的“Copy”)。它检查匹配数据的行并用任何新数据更新行的其余部分。但我无法弄清楚如何从“Grab”获取新行以移动到“Copy”。 下面的代码采用抓取范围并将任何差异复制到复制表。
**有没有办法将新数据附加到“复制”?如果抓取中出现新行,请将其附加到复制表。 **
这是一个与我的设置非常相似的工作表的链接:
https://docs.google.com/spreadsheets/d/1kdn48lel-0er6ACZRjxSUHgYJQobDj2nHrnFq2G2Hm8/edit?usp=sharing
检查和修复数据的代码在该工作表的脚本编辑器中,但我也会在下面发布。
function mergeData()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Copy");
var sheet2 = ss.getSheetByName("Grab");
var rangeSheet1 = sheet1.getRange(3, 1, sheet1.getLastRow() + 1, sheet1.getLastColumn() -7);
var dataSheet1 = rangeSheet1.getValues();
var displaySheet1 = rangeSheet1.getDisplayValues();
var rangeSheet2 = sheet2.getRange(2, 1, sheet2.getLastRow(), sheet2.getLastColumn());
var dataSheet2 = rangeSheet2.getValues();
var displaySheet2 = rangeSheet2.getDisplayValues();
for (var i = 0; i < dataSheet1.length; i++)
{
for (var j = 0; j < dataSheet2.length; j++)
{
if (displaySheet1[i][0] == displaySheet2[j][0])
{
if (dataSheet1[i].length != dataSheet2[j].length)
{
for (var k = 0; k < dataSheet1[i].length - dataSheet2[j].length; k++)
{
dataSheet2[j].push(dataSheet1[i][dataSheet1[i].length - 1]);
}
}
dataSheet1[i] = dataSheet2[j]
}
}
}
rangeSheet1.setValues(dataSheet1);
}
如何向“复制”工作表添加新行?
依靠这两个答案,我已经走到了这一步,但似乎都没有附加新数据:
Update or Replace Row data in other sheet when unique id is found - Google Appscript
Merging google sheets: match with specific col values and merge data in 2 different sheets
这些是 Stackoverflow 链接,不是外部来源
我什至不能投票给他们,因为我没有代表:(
感谢您的帮助。如果我没有提供足够的信息或没有正确询问,请告诉我。我是新来的。
答案 0 :(得分:0)
function mergeData()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Copy");
var sheet2 = ss.getSheetByName("Grab");
var sheet1Header = 2;
var sheet2Header = 1;
var rangeSheet1 = sheet1.getRange(sheet1Header + 1, 1, sheet1.getLastRow() - sheet1Header);
var displaySheet1 = rangeSheet1.getDisplayValues();
var rangeSheet2 = sheet2.getRange(sheet2Header + 1, 1, sheet2.getLastRow() - sheet2Header, sheet2.getLastColumn());
var displaySheet2 = rangeSheet2.getDisplayValues();
Logger.log(displaySheet1);
Logger.log(displaySheet2);
displaySheet2.forEach( data => {
Logger.log(data);
var regNo = data[0];
Logger.log(regNo);
var textFinder = rangeSheet1.createTextFinder(regNo);
var match = textFinder.findNext();
if(match){
Logger.log("UPDATE DATA");
//Reg. No found in Copy Sheet, Update data
sheet1.getRange(match.getRow(),1,1,data.length).setValues([data]);
}
else {
//Add new Reg. No to Copy Sheet
Logger.log("APPEND DATA");
sheet1.appendRow(data);
}
});
}
displaySheet2
变量displaySheet2
中的每一行数据。使用 Range.createTextFinder(findText) 检查当前行的 regNo
数据是否存在于 rangeSheet1
(我们在步骤 1 中获得的范围)中。它将返回一个 TextFinder obj,使用 TextFinder.findNext() 获取匹配范围。如果在所选范围内未找到当前的 regNo
字符串,它将返回一个 null
值。