javascript - Google Apps 脚本 - onEdit 使用数组将数据从一张表复制到另一张表
问题描述
由于我的工作表名称不断变化,我想使用 onEdit 从一个工作表复制到另一个超过 10 个选项卡
我试图修改下面的脚本来做我需要的,但就是找不到我出错的地方。
因此,如果有人在 10 个选项卡中的任何一个的第 36 列中选中一个框,代码就会将该行复制到主表
function CopyRange(e) {
var range = e.range;
var sheet = range.getSheet()[6, 16];
if (sheet.getSheetName() == [6, 16] && range.columnStart == 36 && range.rowStart >= 2 && e.value
== "TRUE") {
var [[]] = sheet.getRange(range.rowStart, 1, 1).getValues();
e.source.getSheetByName("Master").appendRow([]);
}
}
解决方案
解释/问题:
您的方法有几个问题:
var sheet = range.getSheet()[6, 16];
不是对数组进行切片的有效方法。而是使用slicegetSheets().slice(6,16)
。sheet.getSheetName() == [6, 16]
这条线也无效。您正在将名称 (String
) 与数组进行比较。相反,您想检查活动工作表的名称是否属于工作表名称列表。首先,您需要使用map获取所有工作表名称:const all_sheets = e.source.getSheets().slice(6,16).map(sh=>sh.getName());
然后使用包含您可以检查活动工作表的名称是否属于
all_sheets
数组:all_sheets.includes(active_sh.getName())
var [[]] = sheet.getRange(range.rowStart, 1, 1).getValues();
这条线也无效。您想要的是将数据存储到变量中。但首先您需要将其转换为一维数组,因为这是appendRow
接受的参数类型。因此,您需要将其平十:const data = active_sh.getRange(row,1,1,active_sh.getLastColumn()).getValues().flat(); master_sh.appendRow(data);
最后,您可能需要重命名
CopyRange
为onEdit
以使其正常工作,除非您将可安装的onEdit
触发器附加到CopyRange
.
解决方案:
function onEdit(e) {
const row = e.range.rowStart;
const col = e.range.columnStart;
const master_sh = e.source.getSheetByName("Master")
const active_sh = e.source.getActiveSheet();
const all_sheets = e.source.getSheets().slice(6,16).map(sh=>sh.getName());
if(all_sheets.includes(active_sh.getName()) && col == 36 && row > 1 && e.value == 'TRUE'){
const data = active_sh.getRange(row,1,1,active_sh.getLastColumn()).getValues().flat();
master_sh.appendRow(data);
}
}
推荐阅读
- r - 如果满足条件并且字符串值包含在字符向量中,则在 R 中循环遍历行,将新列值设置为字符向量元素
- microservices - HTTP 存根服务器 stubby4j 是否支持带有附加查询参数设置的请求代理?
- node.js - 声明 edge-js 时 fs.existsSync 不是函数错误
- python - 嵌套 If/While/If 语句的问题
- qt - 带有加号“+”的 QNetworkRequest vs S3 登录路径
- list - 使用python for循环在csv文件中打开多个列表
- vim-plugin - 如何在 nixos 上自定义 vim 插件?
- mysql - MySQL 过程 if 子句然后插入
- linux - 在另一个分支中显示文件的 mtime
- java - 能够在Java扫描仪中输入一个值和一个字符串以输出排名