【发布时间】:2021-05-04 20:08:30
【问题描述】:
老用户,第一次来电。我最近创建并帐户,并且很喜欢这个网站提供的帮助,所以我想我会寻找一些我自己的。
所以我已经能够解析两张表(“Grab”和“Copy”),并更新已更改的日期。 (“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 链接,不是外部来源
我什至不能投票给他们,因为我没有代表:(
感谢您的帮助。如果我没有提供足够的信息或没有正确询问,请告诉我。我是新人。
【问题讨论】:
-
我很抱歉它很混乱。您之前提到您有一个现有的代码来比较 2 张纸并更新已更改的日期。然后你问如何将你的 Grab 表中添加的新数据附加到你的副本表中?这是一个单独的功能对吗?另一个问题,你如何触发你的 mergeData()?使用 onEdit() 触发器检查是否添加了完整的新行数据非常复杂,那么使用自定义菜单来触发附加功能是否可以?
-
我试图查看您的代码,但您的范围完全搞砸了。我认为这不值得费心。如果我能看到你的数据,那么我什至不会尝试。哦,顺便说一句,我不关注外部资源的链接。
-
我编辑了我的问题以进行澄清。 Ron,上面的代码检查第一张表中的所有数据,并用新数据编辑第二张表(例如,如果日期要更改)。该功能将使用选项按钮手动触发,该代码不在此处。我想用这个已经检查的数据然后它也可以添加新行。如果它必须是第二个功能,那就这样吧。 MetaMan,范围可以避免标题并忽略比起始表更宽的列。上面的链接是 Stack Overflow 链接,我很抱歉我没有指定。另外,很抱歉这不值得。
标签: javascript google-apps-script google-sheets