Заполните сетку множественного выбора из листов - PullRequest
0 голосов
/ 31 января 2020

спасибо всем заранее за любую поддержку, которую вы сможете оказать! Я пытаюсь заполнить таблицу множественного выбора в формах Google из Google Sheets. Я был в состоянии заполнить выпадающие списки, но не сетки. Вот код, который я использую для сетки:

 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);

Любые предложения будут высоко оценены! Спасибо.

Ответы [ 2 ]

1 голос
/ 31 января 2020

Всего несколько рекомендаций относительно вашего ответа:

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 ()

Я не пытался быть грубым или недобрым. В вашем предыдущем коде были серьезные проблемы, и вы решили их и запустили. Это то, что нам нравится видеть. Хорошая работа.

0 голосов
/ 31 января 2020

Я нашел ответ сам: он заполняет строки и столбцы в вопросе формы с множественным выбором.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...