如何使用 Google Apps 脚本将基于其他两列中的值的列复制到同一工作表上的另一列

问题描述 投票:0回答:1

我这里有一个脚本,田池帮我修改过。如果 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 脚本将列复制到同一工作表上的另一列

下面的屏幕截图显示了所需的结果:

篮球 迈克尔·乔丹 迈克尔·乔丹
棒球 贝比·鲁斯 贝比·鲁斯
足球 乔蒙大拿
韦恩·格雷茨基
骑自行车 兰斯·阿姆斯特朗 兰斯·阿姆斯特朗
网球 罗杰·费德勒
足球 莱昂内尔·梅西 莱昂内尔·梅西
google-sheets google-apps-script
1个回答
0
投票

解决方法:

实际上可以在

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.