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

基于Google Script的SUMPRODUCT后续需求:修改状态返回格式

后续问题:扩展Google Sheets脚本的完成状态展示逻辑

这是我此前在Stack Overflow提问的后续问题,原回答者要求我新建问题而非修改原有问题,因此特此提问。

样本文档包含5个标签页:

  • Dataset Before:处理前的数据集样式
  • Dataset Result (Old):现有脚本处理后的数据集样式
  • Dataset Result (New Requirement):满足新需求后的目标数据集样式
  • Completion Data:用于判定完成状态的数据表
  • Settings:存储各课程对应课程代码映射关系的表

当前使用的脚本如下:

// This is from your provided Spreadsheet.
const obj = [
  { name: "Dataset Before", range: "A2:A" },
  { name: "Completion Data", range: "A2:C" },
  { name: "Settings", range: "E5:I" }
];

// 1. Retrieve values and ranges from 3 sheets.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const [sheet1, sheet2, sheet3] = obj.map(({ name, range }, i) => {
  obj[i].sheet = ss.getSheetByName(name);
  obj[i].range = obj[i].sheet.getRange(range + obj[i].sheet.getLastRow());
  obj[i].values = obj[i].range.getValues();
  if (i == 1) {
    // For "Completion Data" sheet.
    // Create an object for searching values.
    obj[i].values = obj[i].values.reduce((o, [a, b, c]) => {
      if (c == "Completed") {
        o[b] = o[b] ? { ...o[b], [a]: c } : { [a]: c };
      }
      return o;
    }, {});
  } else if (i == 2) {
    // For "Settings" sheet.
    // Transpose the retrieved values.
    obj[i].len = obj[i].values[0].length;
    obj[i].values = obj[i].values[0].map((_, col) => obj[i].values.map((row) => row[col]));
  }
  return obj[i];
});

// Create an array for putting into the destination range by follwoing your logic.
const values = sheet1.values.map(([a]) => {
  if (sheet2.values[a]) {
    return sheet3.values.map(e => e.some(f => sheet2.values[a][f]) ? "Completed" : "Incomplete");
  }
  return Array(sheet3.len).fill("Incomplete");
});

// Put the values to the destination range.
sheet1.sheet.getRange(2, 2, values.length, values[0].length).setValues(values);
}

现有脚本可实现需求,执行时间约40秒,远快于我之前的方案。它会在“Completion Data”标签页中查找人员ID,若状态为“Completed”则返回“Completed”,其他状态返回“Incomplete”。

新需求:
我需要脚本返回拼接完成日期的完成状态,例如Completed (04/24/2024);若状态为“Enrolled”则返回Incomplete (Enrolled),其他未完成情况返回Incomplete。

遗憾的是我无法完全理解现有脚本的逻辑,自行编写的嵌套循环方案每列执行时间超过15分钟,无法完成运行。我尝试修改return sheet3.values.map(e => e.some(f => sheet2.values[a][f]) ? "Completed" : "Incomplete");这部分代码但始终报错,希望能得到帮助。

若有信息缺失或表述不清,请告知我以便修改补充。谢谢。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:56:21