首页 > 解决方案 > 从 Google 表格导入时,Google Apps 脚本会在表单回复表格中添加额外的空白问题

问题描述

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

当我运行脚本时,表单会完美更新。如果要添加 10 个项目,则表格中会添加 10 个问题。但是,在链接的表单响应表中,通常会添加标题为“[Row 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
}

这是表单响应表的屏幕截图,其中包含附加列: 在此处输入图像描述

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


这似乎是一个错误!

我冒昧地在 Google 的问题跟踪器上为您报告了这一点,并详细说明了行为:

您可以点击页面左上角问题编号旁边的 ☆,让 Google 知道更多人正在遇到此问题,因此更有可能更快地被看到。


推荐阅读