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

求助Google Sheets Apps Script批量处理列值及复制指定行

Google Sheets Apps Script 解决方案

以下是实现你需求的完整脚本,它会遍历整个工作表,而非仅录制时的特定行:

function updateAndCopyRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();
  const numRows = values.length;
  
  // 步骤1-3:将T列(索引19,数组从0开始计数)的"In review"改为"Done"
  for (let i = 1; i < numRows; i++) { // 跳过表头行,无表头则改为i=0
    if (values[i][19] === "In review") {
      values[i][19] = "Done";
    }
  }
  dataRange.setValues(values);
  
  // 步骤4:收集T列为"Done"的行中A-L、N-R列的数据并复制到剪贴板
  const targetData = [];
  for (let i = 1; i < numRows; i++) { // 跳过表头行,无表头则改为i=0
    if (values[i][19] === "Done") {
      const rowData = [];
      // 提取A-L列(索引0到11)
      for (let col = 0; col <= 11; col++) {
        rowData.push(values[i][col]);
      }
      // 提取N-R列(索引13到17)
      for (let col = 13; col <= 17; col++) {
        rowData.push(values[i][col]);
      }
      targetData.push(rowData);
    }
  }
  
  // 将筛选后的数据复制到剪贴板
  if (targetData.length > 0) {
    const tempSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
    tempSheet.getRange(1, 1, targetData.length, targetData[0].length).setValues(targetData);
    tempSheet.getDataRange().copyTo(SpreadsheetApp.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    SpreadsheetApp.getActiveSpreadsheet().deleteSheet(tempSheet);
  }
}

关键说明:

  • 脚本直接操作整个数据区域,彻底解决录制宏仅作用于特定行的问题
  • T列对应数组索引19(A列是索引0,以此类推)
  • 若你的表格没有表头,将循环中的i=1替换为i=0即可
  • 复制到剪贴板通过临时工作表实现,确保数据格式正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:00:51