从工作表填充多项选择网格
Populate multiple choice grid from sheets
提前感谢所有可能提供的支持!
我正在尝试从 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);
如有任何建议,我们将不胜感激!
谢谢。
我自己找到了答案:
这将填充多项选择网格表单问题中的行和列。
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)
关于您的回答的一些建议:
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)
}
我并不是想变得粗鲁或不友善。您以前的代码有一些严重的问题,您解决了这些问题并将其提交给 运行。这就是我们喜欢看到的。干得好。
提前感谢所有可能提供的支持! 我正在尝试从 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);
如有任何建议,我们将不胜感激! 谢谢。
我自己找到了答案: 这将填充多项选择网格表单问题中的行和列。
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)
关于您的回答的一些建议:
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)
}
我并不是想变得粗鲁或不友善。您以前的代码有一些严重的问题,您解决了这些问题并将其提交给 运行。这就是我们喜欢看到的。干得好。