Google Apps Script表格录入表单如何根据输入选择对应输出工作表
实现思路
- 新增字段提取:若你使用单独的月份下拉框,直接读取对应单元格的月份值;若从日期字段提取月份,可通过日期格式化方法得到你需要的月份格式(如Jan、January),需和你预先创建的工作表命名规则完全匹配
- 拼接目标工作表名称:将读取到的DeviceID与月份值按照你设定的命名规则拼接
- 校验工作表存在性:调用
getSheetByName()方法获取目标工作表后,先判断返回值是否为空,避免命名不匹配导致脚本报错 - 写入数据:复用现有写入汇总表的逻辑,将相同数据写入匹配到的目标工作表即可,可保留写入汇总表的逻辑作为数据备份
代码修改参考
在你现有submitData()函数中if (validateEntry()==true)的判断内部,原有写入Database的代码之前,新增以下逻辑:
// --------------新增:匹配目标工作表逻辑开始-------------- // 读取DeviceID const deviceId = shUserForm.getRange("C6").getValue().toString().trim(); let monthStr = ""; /* 二选一使用: 1. 若有单独的月份下拉单元格(示例为C7,需替换为你实际的单元格位置) monthStr = shUserForm.getRange("C7").getValue().toString().trim(); 2. 若从开始日期C8提取月份,下面代码获取3位月份缩写,要全称把'MMM'改为'MMMM' */ const startDate = shUserForm.getRange("C8").getValue(); monthStr = Utilities.formatDate(startDate, Session.getScriptTimeZone(), "MMM"); // 拼接工作表名称,需和你预先创建的工作表命名完全一致 const targetSheetName = `${deviceId}-${monthStr}`; const targetSheet = myGoogleSheet.getSheetByName(targetSheetName); // 校验工作表是否存在 if (!targetSheet) { ui.alert(`未找到对应工作表:${targetSheetName},请确认输入内容或预先创建对应工作表`); return; } // --------------新增:匹配目标工作表逻辑结束--------------
原有写入Database的代码可保留作为汇总备份,再新增一段写入目标分表的代码即可:
// 写入目标分表 const targetBlankRow = targetSheet.getLastRow() + 1; targetSheet.getRange(targetBlankRow,1).setValue(shUserForm.getRange("C4").getValue()); targetSheet.getRange(targetBlankRow,2).setValue(deviceId); targetSheet.getRange(targetBlankRow,3).setValue(startDate); targetSheet.getRange(targetBlankRow,4).setValue(shUserForm.getRange("C10").getValue()); targetSheet.getRange(targetBlankRow,5).setValue(shUserForm.getRange("C12").getValue()); targetSheet.getRange(targetBlankRow,6).setValue(shUserForm.getRange("C14").getValue()); targetSheet.getRange(targetBlankRow,7).setValue(shUserForm.getRange("C16").getValue()); targetSheet.getRange(targetBlankRow,8).setValue(shUserForm.getRange("C18").getValue()); targetSheet.getRange(targetBlankRow,9).setValue(shUserForm.getRange("C20").getValue()); targetSheet.getRange(targetBlankRow,10).setValue(shUserForm.getRange("C22").getValue()); targetSheet.getRange(targetBlankRow,11).setValue(shUserForm.getRange("C24").getValue());
官方模块指引
- 日期格式化相关可查阅
Utilities.formatDate方法说明,支持自定义各类日期输出格式 - 工作表、单元格操作可查阅
SpreadsheetApp.Sheet类、SpreadsheetApp.Range类的官方说明,包含所有表格操作的参数定义 - 后续如果需要优化表单下拉选项联动、自动创建缺失的目标工作表,可查阅
SpreadsheetApp.DataValidation类、Spreadsheet.insertSheet()方法的相关说明
内容的提问来源于stack exchange,提问作者patstat69
相关产品推荐
相关产品推荐

