【问题标题】:Writing a script to auto-create new google sheet upon data entry编写脚本以在数据输入时自动创建新的谷歌表
【发布时间】:2019-05-28 18:45:01
【问题描述】:

我目前有一个谷歌表格,它通过第三方提交的表单接收数据。我正在尝试编写一个脚本,每次提交唯一的 UserID 时都会创建一个新工作表。

例如,如果我有 5 个用户 ID 为 A、B、B、C、C 的提交,我试图让脚本为 A、B 和 C 创建一个唯一的工作表,并将重复的用户 ID 提交分组床单。我认为为 UserID 过滤的数据透视表可以完成后半部分,但我还无法弄清楚工作表的创建尚未对其进行测试。

到目前为止,这是我一直在使用的代码:

function formSheet(e) {
  var sheetName = e.namedValues['user-id'][0];
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName);
if (!sheet) {
  sheet = ss.insertSheet(sheetName);
  var formSheet = e.range.getSheet();
  var headers = formSheet.getRange(1, 1, 1, formSheet.getLastColumn());
  headers.copyTo(sheet.getRange(1, 1));
}
sheet.appendRow(e.values);
}`

作为参考,带有数据的工作表标题为“提交”,我想要的数据在第 2 列的标题“User-Id”下

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这个:

    您在脚本中使用了“user-id”,在您的问题中使用了“User-Id”,那是什么?

    function formsheet(e) {
      Logger.log(JSON.stringify(e));
      var ss=SpreadsheetApp.openById('ssid');
      var name=e.namedValues['user-Id'][0];
      var shts=ss.getSheets();
      if(shts.indexOf(name)==-1) {
        var sh=ss.insertSheet(name);
        var hdrs=e.range.getSheet().getRange(1,1,1,e.range.getSheet().getLastColumn()).getValues()[0];
        sh.appendRow(hdrs);
      }else{
          var sh=ss.getSheetByName(name);
      }
      sh.appendRow(e.values)  
    }
    

    【讨论】:

    • 感谢您的回复!我重命名了“用户名”字段,以避免混淆大小写。我插入了那个脚本,它告诉我第 2 行的值不正确。我在这里遗漏了一些明显的东西吗?
    • 你添加了“ssid”吗?
    • 是的,我的工作表的 SSID 来自 URL。我的意思是说它试图检索“用户名”值的 formSheet 行下的第二行代码是给我错误的原因。表单、工作表和脚本都将该字段称为“用户名”,因此我不确定我输入的 SSID 是否有问题,或者是否需要添加其他命令。跨度>
    • function formatSheet(e) { Logger.log(JSON.stringify(e)); 和查看日志之后的第一行添加另一行并与我分享。
    • 我将它添加到我的答案中。这样做,然后获取然后提交表单并查看日志。复制记录器,让我看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多