如何根据单元格值调用getSheetByName实现跨工作表数据复制
解决方案
直接修改代码中的copyFunction部分,先读取“Dash”工作表Q4单元格的值,再用这个值作为目标工作表的名称参数即可。以下是修改后的完整代码:
function BP3CallTab() { var ui = SpreadsheetApp.getUi(); var result = ui.alert( '请确认', '准备提交3-Call审计了吗?', ui.ButtonSet.YES_NO); // 处理用户响应 if (result == ui.Button.YES) { copyFunction(); } function copyFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // 读取Dash工作表Q4单元格的值,作为目标工作表名称 var targetSheetName = ss.getSheetByName('Dash').getRange('Q4').getValue(); // 获取输入区域数据 var inputValues = ss.getRange('A9:AG11').getValues(); try { // 根据获取到的工作表名称定位目标区域并写入数据 var targetSheet = ss.getSheetByName(targetSheetName); if (!targetSheet) { throw new Error('未找到名为"' + targetSheetName + '"的工作表'); } targetSheet.getRange('A17:AG19').setValues(inputValues); ui.alert('数据已成功复制到工作表"' + targetSheetName + '"'); } catch (e) { ui.alert('复制失败:' + e.message); } } if (result == ui.Button.NO) { ui.alert('未进行任何修改。'); } };
关键修改说明
- 新增读取逻辑:通过
ss.getSheetByName('Dash').getRange('Q4').getValue()获取Dash工作表Q4单元格的内容,将其赋值给targetSheetName变量。 - 替换固定参数:把原来硬编码的
getSheetByName('2')替换为getSheetByName(targetSheetName),实现动态指定目标工作表。 - 补充错误处理:添加
try-catch逻辑,若目标工作表不存在会弹出提示告知用户,避免脚本直接中断报错;复制成功后也会给出明确的操作结果提示。
内容的提问来源于stack exchange,提问作者Bryson Pribble
相关产品推荐
相关产品推荐

