You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Google Apps Script基于双列条件复制列到同工作表指定列

扩展Google Apps Script脚本功能

原脚本由Tanaike协助修改,当前功能为:当对应行E6:E的值不等于“Out”时,将D6:D中的值复制到H6:H中。原脚本代码如下:

function copyAllPresent() {
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName("Base");
  
  // 获取D列和E列的值
  const valuesToCopy = sheet.getRange(6, 4, sheet.getLastRow(), 2).getValues();

  // 创建新数组,判断E列不为"Out"时复制D列值
  const values = valuesToCopy.map(([d, e]) => [e != "Out" ? d : null]);

  // 将数组写入H列
  sheet.getRange(6, 8, values.length).setValues(values);
}

现需扩展脚本功能:当对应行C6:C的值为空时,忽略该行D列值不复制。最终逻辑为:仅当对应行C6:C不为空且E6:E的值不等于“Out”时,才将D6:D的值复制到H6:H中。

尝试调整脚本时遇到问题:map方法似乎无法同时判断两列条件;修改Tanaike提供的其他脚本也仅判断了E6:E是否为“Out”的条件,未满足需求。


修改后的脚本

function copyAllPresent() {
  const ss = SpreadsheetApp.getActive();
  const sheet = ss.getSheetByName("Base");
  
  // 读取C、D、E三列从第6行开始的数据,排除前5行空行
  const valuesToCopy = sheet.getRange(6, 3, sheet.getLastRow() - 5, 3).getValues();

  // 同时判断C列非空且E列不等于"Out",满足则取D列值,否则设为null
  const values = valuesToCopy.map(([c, d, e]) => [c !== "" && e !== "Out" ? d : null]);

  // 将结果写入H列第6行开始的区域
  sheet.getRange(6, 8, values.length).setValues(values);
}

修改说明

  • 调整getRange参数:从第3列(C列)开始读取3列数据(C、D、E),并修正行数计算为sheet.getLastRow() - 5,避免读取前5行的无效空行。
  • 在map方法中解构出C、D、E三列的值,通过逻辑与&&同时校验两个条件:C列不为空、E列不等于"Out",满足条件则返回D列值,否则返回null(对应H列单元格为空)。

预期效果示例

项目类型姓名状态复制结果
BasketballMichael JordanMichael Jordan
BaseballBabe RuthBabe Ruth
FootballJoe MontanaOut
Wayne Gretzky
CyclingLance ArmstrongLance Armstrong
TennisRoger FedererOut
FootballLionel MessiLionel Messi

内容的提问来源于stack exchange,提问作者Codedabbler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:37:04