google-apps-script - 动态填充谷歌应用程序脚本中的文件
问题描述
我有一张名为“Base Sheet”的表格,格式如下
Order# Weight
1213 345
1213 567
3450 111
3450 222
3451 444
我根据“订单号”分组并汇总“重量”并填充到名为“重量”的工作表中
Order# Total_Weight Deleted_Status
1213 912
3450 333
3451 444
我使用“ALASQL”库进行分组和求和。
var res_1 = alasql('SELECT [0] as Order#, sum([1]) as Total_Weight FROM ? GROUP BY [0]',[row]);
我的挑战是,如果“订单号”从“基本表”中完全删除,那么“重量”表中相应的“订单号”应将“已删除状态”设为“是”。
假设我们从基本表中删除订单#“3451”,然后在“重量”表中它必须是
Order# Total_Weight Deleted_Status
1213 912
3450 333
3451 444 Yes
不确定如何在 Google Apps 脚本中动态实现此逻辑。任何建议,将不胜感激。
解决方案
我相信你现在的情况和你的目标如下。
- 您在 Google 电子表格中有 2 张工作表。
- 一个是工作表名称为 的工作表
Base Sheet
。 - 另一个是工作表名称为 的工作表
Weight
。
- 一个是工作表名称为 的工作表
- 当从 中删除“Order#”的值时
Base Sheet
,您希望将 的值放入Yes
工作表中相同“Order#”的列“C”中Weight
。 - 您希望在删除单元格值并删除行时运行脚本。
- 您想使用 Google Apps 脚本实现您的目标。
在这种情况下,我建议如下使用触发器。
- 为了检测手动删除的单元格值,使用了 OnEdit 的简单触发器。
- 为了检测手动删除的行,使用了 OnChange 的可安装触发器。
示例脚本如下。
示例脚本:
请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中。而且,如果您不仅要检测手动删除的单元格值,还要检测手动删除的行,请在函数中安装 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
将放在“重量”中的“3451”的“C”列中。此外,3451
在“基础表”中添加时,Yes
从“重量”中的“3451”的“C”列中删除。Yes
如果即使添加了相同的“Order#”也不想删除,请告诉我。
- 此示例脚本由触发器运行。所以当你直接运行函数
onEdit
时,会出现错误。请注意这一点。当您要运行脚本时,请手动删除工作表“Base Sheet”中的“Order#”。
参考:
推荐阅读
- bootstrap-4 - 鹡鸰中的引导轮播不循环
- java - JpaRepository deleteById() 方法不工作
- java - Tesseract OCR 无法正常工作,如何更准确?
- reactjs - 未调用 Action Reducer 函数
- drupal - 根据块上的内容标题检索视频
- javascript - Chrome DevTools 不显示 .js 文件
- json - 将大量 JSON 数据从文件解析为 JAVA 对象,导致堆内存不足异常
- angular - 角度 8:在无法访问的元素上监听事件
- javascript - 如何在 javascript 扑克游戏中识别 Full House 和 Two pair
- javascript - Javascript链接列表指针