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

Google Apps Script跨工作簿复制指定工作表值的技术求助

修复跨文件夹Google Sheets同名工作表值复制的脚本问题

原脚本存在的问题

  • 语法错误:copyAndPasteSheetWithNewName函数末尾多了一个冗余的},导致脚本无法正常解析
  • 未定义变量:代码中spreadsheet.getActiveRange()的spreadsheet未声明,属于无效引用
  • 无异常处理:未判断目标工作簿中是否存在指定名称的工作表,遇到无对应表的文件会直接报错
  • 使用弃用API:Browser.inputBox已被Google标记为弃用,存在兼容性风险
  • 目标范围逻辑模糊:直接复制到当前活动单元格范围,若范围大小与源表不匹配,会导致数据异常

修正后的脚本

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Copy and Paste')
      .addItem('复制同名工作表值', 'copyAndPasteSheetValues')
      .addToUi();
}

function copyAndPasteSheetValues() {
  // 使用官方推荐的UI弹窗获取工作表名称
  const ui = SpreadsheetApp.getUi();
  const response = ui.prompt('输入要复制的工作表名称:', ui.ButtonSet.OK_CANCEL);
  
  if (response.getSelectedButton() !== ui.Button.OK) return;
  const sheetName = response.getResponseText().trim();
  if (!sheetName) {
    ui.alert('请输入有效的工作表名称');
    return;
  }

  // 获取当前文件所在的文件夹
  const activeFile = SpreadsheetApp.getActiveSpreadsheet();
  const folder = DriveApp.getFileById(activeFile.getId()).getParents().next();
  const files = folder.getFilesByType(MimeType.GOOGLE_SHEETS);

  // 获取接收数据的目标工作表(当前活动工作表)
  const targetSheet = activeFile.getActiveSheet();
  let targetRow = 1; // 从A1开始粘贴,后续表的数据追加到下方

  while (files.hasNext()) {
    const file = files.next();
    // 跳过当前活动文件,避免重复复制
    if (file.getId() === activeFile.getId()) continue;

    try {
      const workbook = SpreadsheetApp.open(file);
      const sourceSheet = workbook.getSheetByName(sheetName);
      
      if (!sourceSheet) {
        console.log(`文件 ${file.getName()} 中未找到名为 ${sheetName} 的工作表`);
        continue;
      }

      // 获取源表有数据的实际范围(避免复制空行空列)
      const sourceRange = sourceSheet.getDataRange();
      const values = sourceRange.getValues();

      // 粘贴到目标表的对应位置
      const targetRange = targetSheet.getRange(targetRow, 1, values.length, values[0].length);
      targetRange.setValues(values);

      // 更新下一次粘贴的起始行
      targetRow += values.length;
    } catch (e) {
      console.log(`处理文件 ${file.getName()} 时出错: ${e.message}`);
      ui.alert(`处理文件 ${file.getName()} 时出错: ${e.message}`);
    }
  }

  ui.alert('所有符合条件的数据已复制完成');
}

脚本说明

  1. 打开目标接收数据的Google Sheet,刷新页面后会出现「Copy and Paste」菜单栏
  2. 选择「复制同名工作表值」,输入要复制的工作表名称
  3. 脚本会遍历同一文件夹下所有Google Sheets工作簿,跳过当前文件,将找到的同名工作表数据以值的形式追加到当前活动工作表中
  4. 加入了异常处理,遇到错误会弹窗提示并记录日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:15:29