如何通过下拉选择工作表实现PO数据自动写入对应项目工作表
实现方案
步骤1:添加项目工作表下拉选择框
打开存储PO数据的表格,在PO工作表的空白单元格(例如J1)输入表头目标项目工作表,选中J2单元格,点击顶部菜单「数据」-「数据验证」,验证规则选择「来自范围的列表」,可手动输入所有项目工作表名称作为选项,保存后即可生成下拉选择框。
步骤2:修改适配多项目的Apps Script代码
替换原有代码为以下内容,代码会读取你在下拉框选择的项目名称,自动匹配对应目标工作表写入数据,同时增加了合法性校验避免报错:
function copyPODataToProject() { // 源PO表配置 const sss = SpreadsheetApp.openById('ahkj54IIndlskdjf123hdUTS'); const poSheet = sss.getSheetByName('PO'); // 读取下拉框选择的目标项目名称,若你的下拉选项存储在其他单元格可修改此处的单元格位置 const targetProjectName = poSheet.getRange('J2').getValue(); if (!targetProjectName) { SpreadsheetApp.getUi().alert('请先选择目标项目工作表'); return; } // 读取PO表A2:I50区间的数据 const range = poSheet.getRange('A2:I50'); const data = range.getValues(); // 目标项目登记册表格配置 const tss = SpreadsheetApp.openById('78udjUdklo78354fghUjdlIWS24Chf'); const targetSheet = tss.getSheetByName(targetProjectName); // 校验目标工作表是否存在 if (!targetSheet) { SpreadsheetApp.getUi().alert(`未找到名为「${targetProjectName}」的项目工作表`); return; } // 将数据写入目标工作表最后一行的下方 targetSheet.getRange(targetSheet.getLastRow()+1, 1, data.length, data[0].length).setValues(data); // 可选:同步完成后清空PO数据和下拉选项,方便下次录入,取消注释即可生效 // range.clearContent(); // poSheet.getRange('J2').clearContent(); SpreadsheetApp.getUi().alert('PO数据已成功同步到对应项目登记册'); }
可选:自动同步目标表格的工作表名到下拉选项
如果不需要手动维护下拉选项列表,希望新增项目工作表后自动同步到下拉选项,可添加以下函数,设置触发器为「打开电子表格时」运行即可:
function updateProjectDropdown() { const sss = SpreadsheetApp.openById('ahkj54IIndlskdjf123hdUTS'); const poSheet = sss.getSheetByName('PO'); const tss = SpreadsheetApp.openById('78udjUdklo78354fghUjdlIWS24Chf'); // 获取目标表格所有工作表名称 const allProjectSheets = tss.getSheets().map(sheet => sheet.getName()); // 自动更新J2单元格的下拉选项 const validationRule = SpreadsheetApp.newDataValidation() .requireValueInList(allProjectSheets) .build(); poSheet.getRange('J2').setDataValidation(validationRule); }
可选:添加一键运行按钮
在PO工作表顶部插入「绘图」自定义一个按钮,绘制完成后右键点击按钮选择「分配脚本」,输入copyPODataToProject,后续选择目标项目后点击按钮即可完成数据同步。
内容的提问来源于stack exchange,提问作者Sessionone
相关产品推荐
相关产品推荐

