我有一张名为";基片";采用以下格式
Order# Weight
1213 345
1213 567
3450 111
3450 222
3451 444
I根据";订单号";和sum";重量;并填充在称为";重量;
Order# Total_Weight Deleted_Status
1213 912
3450 333
3451 444
我用"0"进行分组和求和;ALASQL";图书馆
var res_1 = alasql('SELECT [0] as Order#, sum([1]) as Total_Weight FROM ? GROUP BY [0]',[row]);
我的挑战是;订单号";从";基片";则相应的";订单号";在";重量;片材应该具有";Deleted_Status";作为";是的";。
假设我们删除订单";3451";从基片开始;重量;纸张必须是
Order# Total_Weight Deleted_Status
1213 912
3450 333
3451 444 Yes
不知道如何在谷歌应用程序脚本中动态实现此逻辑。如有任何建议,我们将不胜感激。
我相信你的现状和目标如下。
- 您在Google电子表格中有两张表格。
- 一个是图纸名称为
Base Sheet
的图纸 - 另一种是具有图纸名称
Weight
的图纸
- 一个是图纸名称为
- 当";订单号";如果从
Base Sheet
中删除了CCD_;C";相同的";订单号";在片材CCD_ 5中 - 您希望在删除单元格值和行时运行脚本
- 你想使用谷歌应用程序脚本来实现你的目标
在这种情况下,我建议按如下方式使用触发器。
- 为了检测手动删除的单元格值,使用了OnEdit的简单触发器
- 为了检测手动删除的行,使用了OnChange的可安装触发器
示例脚本如下。
示例脚本:
请将以下脚本复制并粘贴到谷歌电子表格的脚本编辑器中。而且,如果您不仅要检测手动删除的单元格值,还要检测手动删除行,请将OnChange触发器安装到函数onEdit
中。
function onEdit(e) {
const sheet = e.source.getActiveSheet();
if (sheet.getSheetName() != "Base Sheet") return;
const obj = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues().reduce((o, [a]) => Object.assign(o, {[a]: true}), {});
const sheetWheight = e.source.getSheetByName("Weight");
const values = sheetWheight.getRange(2, 1, sheetWheight.getLastRow() - 1).getValues().map(([a]) => [obj[a] ? "" : "Yes"]);
sheetWheight.getRange(2, 3, values.length, 1).setValues(values);
}
- 在此脚本中,使用图纸名称
Base Sheet
和Weight
。这些是你的问题。如果这些表单名称与您的实际情况不同,请修改以上脚本
注意:
- 在这个示例脚本中,我准备检测手动删除的单元格值和手动删除的行。因此例如当
3451
在";基片";Yes
被置于列"0";C";的";3451";在";重量";。并且当CCD_;基片";从列"0"中删除Yes
;C";的";3451";在";重量";。- 如果您不想删除CCD_ 13;订单号";是添加的,请告诉我
- 此示例脚本由触发器运行。因此,当您直接运行函数
onEdit
时,会发生错误。请小心。当您想要运行脚本时,请手动删除"订单号";在片材"中;基片">
参考文献:
- 简单触发器
- 可安装触发器
由于现有脚本正在将订单和组合权重复制到"重量;表,你能不能不只是使用表内公式来产生";Deleted_Status";柱
例如,假设您的";订单号";以及";重量;"基本表"中的列在A:B中;订单号";以及";总重量;"权重"表中的列也在A:B中;Deleted_Status";列为Weight!C: C。您可以将以下公式放在空的C列的C1中:
=ArrayFormula({"Deleted_Status"; IF(A2:A="",,IF(NOT(ISERROR(VLOOKUP(A2:A,'Base Sheet'!A:A,1,FALSE))),,"Yes"))})
此公式在第一个单元格中创建标题。如果单元格A2:A(在当前"权重"表中(为空,则C2:C中的相应单元格保持为空。否则,如果该单元格的值在"基本表"的A列(即IF(NOT(ISERROR(VLOOKUP
(中找到,则该单元格保持为空。如果是错误(即,如果在那里找不到A2:A值(,则结果为Yes
。