我这里有一个脚本,田池帮我修改过。如果 E6:6 中相应行中的值不等于“Out”,则它将 D6:D 中的值复制到 H6:H。这是原始脚本:
function copyAllPresent() {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Base");
// Retrieve values from columns "D" and "E".
const valuesToCopy = sheet.getRange(6, 4, sheet.getLastRow(), 2).getValues();
// Create a new array.
const values = valuesToCopy.map(([d, e]) => [e != "Out" ? d : null]);
// Put the array to column "H".
sheet.getRange(6, 8, values.length).setValues(values);
}
但是,我想进一步扩展它。如果 C6:C 中的值是“”,那么我还想忽略这些单元格中的值。最终的逻辑是: 如果 C6:C 中的相应行为空或者 E6:E 中的相应行中的值不是“Out”,则将 D6:D 复制到 H6:H。
map
似乎不允许我评估两个单独的列并返回结果。我还尝试修改 Tanaike 提供的其他脚本作为解决方案,但它似乎只是评估 E6:E 中相应行中的值是否为“Out”。
这里是对原始问题的引用:如果相邻列不包含特定值,如何使用 Google Apps 脚本将列复制到同一工作表上的另一列
下面的屏幕截图显示了所需的结果:
篮球 | 迈克尔·乔丹 | 迈克尔·乔丹 | ||||
棒球 | 贝比·鲁斯 | 贝比·鲁斯 | ||||
足球 | 乔蒙大拿 | 出 | ||||
韦恩·格雷茨基 | ||||||
骑自行车 | 兰斯·阿姆斯特朗 | 兰斯·阿姆斯特朗 | ||||
网球 | 罗杰·费德勒 | 出 | ||||
足球 | 莱昂内尔·梅西 | 莱昂内尔·梅西 |
实际上可以在
map
函数中使用三元运算符来计算两列。但是,为了获得所需的结果,仅当 D6:D
不为空 AND
H6:H
不是 Out时,才会将
C6:C
中的值复制到 E6:E
尝试对现有脚本稍作修改的版本:
function copyAllPresent() {
const ss = SpreadsheetApp.getActive();
const sheet = ss.getSheetByName("Base");
// Retrieve values from columns "C", "D", and "E".
const valuesToCopy = sheet.getRange(6, 3, sheet.getLastRow(), 3).getValues();
// Create a new array.
//Values are only pushed to the Array if "C" is not blank and "E" is not equal to "Out"
const values = valuesToCopy.map(([c, d, e]) => [(e != "Out" && c != "") ? d : null]);
// Put the array to column "H".
sheet.getRange(6, 8, values.length).setValues(values);
}