当前位置: 首页 > 知识库问答 >
问题:

当从Google工作表导入时,Google应用程序脚本将额外的空白问题添加到表单响应表中

微生恩
2023-03-14

我正在使用GoogleApps脚本将来自GoogleSheets的问题添加到GoogleForm中。列表从两个单独的数组中读取,并作为单独的网格类型问题添加。我还将工作表设置为表单结果的目标。

当我运行脚本时,表单得到了完美的更新。如果要添加10个项目,则在表单中添加10个问题。但是,在链接的表单响应表中,经常会添加标题为“[第1行]”的其他列。每次运行脚本时,附加列的数量及其位置都会发生变化。我还没学会任何模式。

我知道在表单的UI中创建问题时,“行1”作为网格类型问题的默认第一项出现。我不确定这是否与此有关。仅供参考-网格项允许添加多行问题,但我只添加一个问题。我知道有一个多选网格类型,但我不喜欢它的格式。

作为一种解决方案,我创建了一个脚本来删除所有这些额外的列,但我真的很想弄清楚到底发生了什么。

对正在发生的事情有什么想法吗?

以下是我的部分代码:

function editForm()
{
  var setupSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Setup'); //Create variable for the Setup sheet
  var metricSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Final Metric Statements'); //Create variable for the Metric Statements sheet
  var form = FormApp.openById(setupSheet.getRange("D1").getValue()); //Open form using the form ID from the setup sheet  

  var pageFour = form.addPageBreakItem().setTitle('Questions');

  var emotLen = 0; //Counter for sub-emotion items
  var featLen = 0; //Counter for sub-feature items

//Count number of items for first list
  while (((metricSheet.getRange("C"+ (emotLen+2)).getValue()) != "") && ((metricSheet.getRange("C"+ (emotLen+2)).getValue()) != "#N/A")) //Go through sub-emotion column until a blank cell
  {
   emotLen++; //Increase the counter
  }

//Count number of items for second list
  while (((metricSheet.getRange("D"+ (featLen+2)).getValue()) != "") && ((metricSheet.getRange("D"+ (featLen+2)).getValue()) != "#N/A")) //Go through sub-feature column until a blank cell
  {
   featLen++; //Increase the counter
  }

  if (emotLen > 0)
  {
    var emotRng = metricSheet.getRange(2,3,emotLen); //Create a range for sub-emotions based on number of items and column
    var emotArray = emotRng.getValues(); //Copy the items into an array

    for (i=0; i <= (emotLen-1); i++)
    {
      var emotItem = form.addGridItem();
      emotItem.setRows(emotArray[i]);
      emotItem.setColumns(['Strongly Disagree', 'Disagree','Slightly Disagree', 'Neither Disagree or Agree', 'Slightly Agree', 'Agree', 'Strongly Agree', 'N/A']);//Add column header
      emotItem.setRequired(true);
    }
  }

  if (featLen > 0 )
  {
    var featRng = metricSheet.getRange(2,4,featLen); //Create a range for features based on number of items
    var featArray = featRng.getValues(); //Copy the items into an array

    for (i = 0; i <=(featLen-1); i++) //Go through all items in the array
    {
      var featItem = form.addGridItem();//Add item to survey
      featItem.setRows(featArray[i]); //Add row item
      featItem.setColumns(['Strongly Disagree', 'Disagree','Slightly Disagree', 'Neither Disagree or Agree', 'Slightly Agree', 'Agree', 'Strongly Agree', 'N/A']);//Add column header
      featItem.setRequired(true);
    }
  }

  //deleteRowColumns();  

  //Logger.log(emotLen, emotArray, featLen, featArray); //Logger used for debugging
}

共有1个答案

艾国安
2023-03-14

我冒昧地在谷歌的问题追踪器上为您报告了这一点,详细说明了以下行为:

  • 通过应用程序脚本函数将GridItems添加到附加有工作表的表单中,会间歇性地添加不存在的问题列

你可以打电话☆ 在页面左上角的问题编号旁边,它让谷歌知道有更多的人遇到了这个问题,因此它更有可能更快地被看到。

 类似资料:
  • 我试图概念化我的结构和值,以组织表单中的多个表中的表单响应基于我的表单问题响应之一(更改的位置)选择的值。我有一个清单,到目前为止完成如下。我还列出了额外的步骤,以及我认为我需要创造什么来实现我想要的。有人能指导我指出我可能存在的问题或更好的方法吗? 打开表格-已完成 打开电子表格-已完成 Form将正确格式的响应保存到电子表格-已完成 设置对变量的表单响应-完成 将表单问题设置为变量-已完成 在

  • 有人能帮我把脚本布局转换成实际的功能代码吗?我有一般的编码知识,但我不知道正确的语法。 基本上,我需要的是一个脚本,当提交表单条目时,它会在所有工作表/选项卡之间循环。表单包含提交表单的人的姓名(字符串)、开始日期、结束日期,最后是注释字段(字符串)。 我需要脚本来遍历每个工作表的第5行,并查找在第一个表单字段中输入的字符串(提交表单的人的姓名)。如果它找到了该名称,它应该将与该名称对应的列保存到

  • 我有一个GoogleApps电子表格,其中一列包含日期和时间。这张纸是由几张纸合并而成的。在某些行上,该值是一个日期(即typeof sheet.getRange(i,2).getValue()==“object”,带有日期的方法)。其他时间,此单元格是一个数字(即typeof sheet.getRange(i,2).getValue()=“number”),但单元格格式将单元格显示为一个日期。

  • 我使用谷歌脚本生成了一个结构相同但内容不同的表单列表。我想收集每个表单的回复,并将它们合并成一个单独的谷歌表单。有什么方法可以在google脚本中这样做吗?

  • 在当前版本的Google Sheet中,要在单元格中插入超链接,可以执行以下操作 在新版Google Sheets中,超链接插入是不同的,您可以这样做。 但是,我有一个问题,在电子表格中插入的值不是我所期望的。在这张显示插入链接的图像中,在=HYPERLINK之前插入了一个“插入”——我不知道这是从哪里来的。有什么想法吗?

  • 我正在通过谷歌webapp进行搜索,我想通过从谷歌表格单元格中获取超文本标记语言设计来显示前端。在屏幕截图中显示一些示例 这是我的脚本代码 main.html 搜索html serversidefunc。gs 加载部分。gs 我希望我上面的帖子很清楚。