首页 > 解决方案 > 谷歌脚本正在将变量的先前值传递给谷歌表

问题描述

我正在使用 Google 表单。此表单将从用户那里收集数据,然后将其传递到 Google 表格中,以根据用户在表单中输入的数据创建特定格式的报告。

由于报告有特定的格式,所以我必须复制一个模板以避免覆盖原始模板。

当数据输入到 Google 表格时,我遇到了问题。Google 脚本正在输入变量“NewTempCopyName”的先前值。

下面是代码:

 function onSubmit(e) {

      var NewTempCopyName = Utilities.formatDate( new Date(),"GMT+1","ddMMyyyyhhmmss");
      Logger.log(NewTempCopyName);

      var tmpsheet = DriveApp.getFilesByName("Form2 Template").next();
      tmpsheet.makeCopy(NewTempCopyName);
      var fid = tmpsheet.getId();
      var ss =SpreadsheetApp.openById(fid);
      SpreadsheetApp.setActiveSpreadsheet(ss);
      var sheet = ss.getSheetByName("Sheet1");

      Logger.log(NewTempCopyName);
      SpreadsheetApp.getActiveSheet().getRange("B1").setValue(NewTempCopyName);
      Logger.log(NewTempCopyName);

    }

在上面的代码中,如果变量的先前值为 18092018114846,新值为 18092018115332,则脚本在 B1 中传递 18092018114846。

记录器在前后记录正确的值:

SpreadsheetApp.getActiveSheet().getRange("B1").setValue(NewTempCopyName);

标签: google-apps-script

解决方案


您设置NewTempCopyName一次,就没有理由改变它。即使它是基于 DateTime 的,它也不会随时间更新。

目前尚不清楚您要在哪个工作表中设置 B1 的值。如果是副本,则需要进行以下更改:

var newCopy = tmpsheet.makeCopy(NewTempCopyName);
var fid = newCopy.getId();

如果不是,那么您的代码会像描述的那样运行;您确定 Logger 在第 13 行到第 15 行之间列出了不同的值吗?


推荐阅读