【发布时间】:2020-02-11 03:41:25
【问题描述】:
我想要做的是把这个公式=iferror(if(match($A2&F$1,arrayformula(Transpose!B$3:B&Transpose!B$1),0),"P"),"") 变成谷歌表格的脚本。本质上,公式在 F 之后的每隔一列和 2 下的每一行中运行。
例如,在 H 列中,我有
=iferror(if(match($A2&H$1,arrayformula(Transpose!C$3:C&Transpose!C$1),0),"P"),"")
在 J 列我有=iferror(if(match($A2&J$1,arrayformula(Transpose!D$3:D&Transpose!D$1),0),"P"),"")
等等。
我现在拥有它的方式是将这个公式粘贴到其他每一列的每个单元格中,当我添加更多数据时,我必须调整公式,所以它需要太长时间。我已经附上了工作簿,所以你可以看到我在说什么。
任何帮助,将不胜感激。
谢谢你
https://docs.google.com/spreadsheets/d/1ZBrg4XoeL21mXwn93XT35kgjrE5pqx9cd3xEvfojIXM/edit?usp=sharing
我试过了
var ss=SpreadsheetApp.getActive().getSheetByName('Transpose')
var Ts=SpreadsheetApp.openById('1ZBrg4XoeL21mXwn93XT35kgjrE5pqx9cd3xEvfojIXM').getSheetByName('Attendance')
var meeting = ss.getRange("B3:B37").getValues();
var targetNames = Ts.getRange("A2:A37").getValues();
var writtingRange = Ts.getRange("F2:F37").getValues();
var updatedUser = targetNames;
var writtingColumn = -1;
var coolMatrix;
for (var i = 0; i < meeting.length; i++) {
var name = meeting[i][0]
for (var j = 0; j < targetNames.length; j++) {
if (targetNames[j][0] == name) {
for (var z = 0; z < writtingRange[0].length; z++) {
if (writtingRange[j][z] == '' && writtingColumn < 0) {
writtingColumn = z;
break;
}
}
writtingRange[j][writtingColumn] = meeting[i][1];
updatedUser[j] = true;
}
}
}
Ts.getRange("F2:F37").setValues(writtingRange);
}
但它在名称匹配的地方给我空白,在名称不匹配的地方给我未定义“未定义”我也知道这个脚本只适用于一列而不是其他每一列。
【问题讨论】:
-
你能展示你试图复制的脚本吗?
-
@jascanellas 我刚刚添加了我尝试过的脚本。我不确定它会有多大帮助
-
您收到
undefined,因为writtingRange为空或值为“未定义”。我不明白第三个for循环,因为它正在检查您尚未编写的列的长度。你能解释一下你想比较什么,你期望的结果是什么? -
所以我是新手,我有一个旧脚本可以复制和粘贴,但根据学生姓名从顶行到底行,这是我得到这个脚本的地方,所以我不确定是什么第三个for if for。我的最终目标如下:我有 2 张名为 Transpose 的 Sheet1 收集了在场人员的姓名(数据是从 Google 表单收集的)。示例 B 列的名称 os 2/12/2020 和第 3-8 行有孩子的名字。名为 2/12/2020 的 C 列下面有 X # 个名称,依此类推。 Sheet2 在 A 列上具有随机顺序的名称,然后 F 列是 2/12/2020 列 H 2/13/2020 J 2/14/2020
-
我需要做的是,每天在场的每个孩子都应该在他们在场的那一天得到一个“P”,否则留空。 @Jescanellas
标签: if-statement google-apps-script match