【问题标题】:Populate multiple choice grid from sheets从工作表填充多项选择网格
【发布时间】:2020-01-31 14:47:30
【问题描述】:

在此先感谢大家提供的任何支持! 我正在尝试从 Google 表格中填充 Google 表单中的多项选择网格。 我已经能够填充下拉列表,但不能填充网格。 这是我用于网格的代码:

 var form = FormApp.openById("MyId");
    var GridList = form.getItemById("MyItem").asGridItem();
    var ss = SpreadsheetApp.openById("MyGoogleSheet");
    var names = ss.getSheetByName("MySheet");
    var sheetValues = names.setRows(['Row1', 'Row2', 'Row3'])
    var sheetValues = names.setColumns(['Column1', 'Column2', 'Column3'])
    var formValues = [];
    for(var i = 0; i < sheetValues.length; i++)    
    if(sheetValues[i][0] != "")
    formValues[i] = sheetValues[i][0];
    GridList.setChoiceValues(formValues);

任何建议将不胜感激! 谢谢。

【问题讨论】:

  • Class Sheet 中没有 setColumns 或 setRows 方法。您有两个 sheetValues 声明,这两个声明都没有意义。有很多关于从电子表格中获取数据的示例。做更多的研究。
  • 多么不友善和粗鲁。无论如何,我排除了故障并解决了它,不用感谢你,Cooper。

标签: google-apps-script google-sheets grid google-forms


【解决方案1】:

就你的回答给你一些建议:

function afunc() {
  var form = FormApp.openById('MyId');
  var PtjGridList = form.getItemById(MyItem).asGridItem();
  var ss = SpreadsheetApp.openById("MyGoogleSheet");
  var PtjNombre = ss.getSheetByName("MySheet");
  //var RowValues = PtjNombre.getRange(2, 5, PtjNombre.getMaxRows() - 1).getValues();

上面的行应该替换为下面的行,您的代码将运行得更快,更可靠。

  var RowValues = PtjNombre.getRange(2, 5, PtjNombre.getLastRow() - 1).getValues();//replace with this

  var ValuesRow = [];

  //sheetValues is undefined within this function
  for(var i = 0; i<sheetValues.length; i++)
    if(RowValues[i][0] != "")ValuesRow[i] = RowValues[i][0];

上面的函数最好改写成如下方式:

  for(var i = 0; i<sheetValues.length; i++) {
    if(RowValues[i][0] != "") {
      ValuesRow[i] = RowValues[i][0];
    }
  }
  PtjGridList.setRows(ValuesRow)
  //var ColumnValues = PtjNombre.getRange(2, 6, PtjNombre.getMaxRows() - 1).getValues();

使用 getLastRow() 会好很多,因为使用 getMaxRows() 会导致在数据末尾获得大量空值,并且通常会导致错误。

  var ColumnValues = PtjNombre.getRange(2, 6, PtjNombre.getLastRow() - 1).getValues();//replace with this

  var ValuesColumn = [];

  //again sheetValues is not defined within this function
  for(var i = 0; i < sheetValues.length; i++)
    if(ColumnValues[i][0] != "")
      ValuesColumn[i] = ColumnValues[i][0];
  //would be better to write like this:

再次,sheetValues 没有在这个函数中定义,下面的重写将大大提高可读性。

  for(var i = 0; i < sheetValues.length; i++) {
    if(ColumnValues[i][0] != "") {      
      ValuesColumn[i] = ColumnValues[i][0];
    }
  }

  PtjGridList.setColumns(ValuesColumn)
}

getLastRow()

getMaxRows()

我并不想表现得粗鲁或不友善。你之前的代码有一些严重的问题,你解决了这些问题并让它运行。这就是我们喜欢看到的。干得好。

【讨论】:

  • 谢谢。与所有事物一样,形式和内容都很重要。我会尽我所能充分利用您的建议。
【解决方案2】:

我自己找到了答案: 这会填充多项选择网格表单问题中的行和列。

var form = FormApp.openById('MyId');
var PtjGridList = form.getItemById(MyItem).asGridItem();
var ss = SpreadsheetApp.openById("MyGoogleSheet");
var PtjNombre = ss.getSheetByName("MySheet");
var RowValues = PtjNombre.getRange(2, 5, PtjNombre.getMaxRows() - 1).getValues();
var ValuesRow = [];
for(var i = 0; i < sheetValues.length; i++)
if(RowValues[i][0] != "")
ValuesRow[i] = RowValues[i][0];
PtjGridList.setRows(ValuesRow)
var ColumnValues = PtjNombre.getRange(2, 6, PtjNombre.getMaxRows() - 1).getValues();
var ValuesColumn = [];
for(var i = 0; i < sheetValues.length; i++)
if(ColumnValues[i][0] != "")
ValuesColumn[i] = ColumnValues[i][0];
PtjGridList.setColumns(ValuesColumn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2011-01-21
    • 2021-11-05
    • 2015-10-06
    相关资源
    最近更新 更多