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

如何将多工作表多行数据复制粘贴至单个工作表

解决多工作表数据批量追加到Calendar的问题

你的核心问题是要批量遍历指定工作表,将每个表的A3:M区域数据追加到Calendar工作表的现有数据末尾,而非仅处理单个XLE表。之前尝试用getRange传入多表范围的方式不可行,因为getRange仅支持单个工作表的范围操作,必须逐个处理目标工作表。

修改后的代码

function copyRowsWithSetValues() {
  const id = '113-_bKJT9GkbXBGmB3sOQYhNMrAdQ2xx_oPmAPJrxHA';
  const spreadsheet = SpreadsheetApp.openById(id);
  const calendarSheet = spreadsheet.getSheetByName('Calendar');
  
  // 定义需要处理的目标工作表名称列表
  const targetSheetNames = ['XLE', 'XLF', 'XLU', 'XLI'];
  
  targetSheetNames.forEach(sheetName => {
    const currentSheet = spreadsheet.getSheetByName(sheetName);
    if (!currentSheet) return; // 工作表不存在则跳过
    
    // 获取当前工作表A3:M的有效数据范围(避免复制空行)
    const lastDataRow = currentSheet.getLastRow();
    if (lastDataRow < 3) return; // A3以下无数据则跳过
    
    const rangeToCopy = currentSheet.getRange(3, 1, lastDataRow - 2, 13); // 从A3开始,取有数据的行,共13列(A-M)
    
    // 计算Calendar的下一个空行起始位置(从第2列开始粘贴)
    const nextEmptyRow = calendarSheet.getLastRow() + 1;
    const rangeToPaste = calendarSheet.getRange(nextEmptyRow, 2);
    
    // 复制数据和格式,可按需调整粘贴类型
    rangeToCopy.copyTo(rangeToPaste, SpreadsheetApp.CopyPasteType.PASTE_VALUES_AND_FORMATS);
  });
}

关键修改说明

  • 用数组+循环批量处理目标工作表,后续要添加其他表(如XLK、XLV等),直接在targetSheetNames数组中追加名称即可。
  • 增加空值判断:工作表不存在或A3以下无数据时自动跳过,避免运行报错。
  • 精确获取有效数据范围:不再复制整个A3:M列(含大量空行),仅复制有数据的行,提升运行效率。
  • 动态计算粘贴位置:每次处理前重新获取Calendar的最后一行,确保数据始终追加到最新末尾。

可选调整

如果只需复制值无需格式,把PASTE_VALUES_AND_FORMATS替换为PASTE_VALUES;如果仅需复制格式(和原代码逻辑一致),替换为PASTE_FORMAT。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:03:28