从 Google Apps 脚本中的电子表格范围更新 Google 表单中的列表时忽略范围内的空单元格
Omit empty cells in a range when updating a list in Google Forms from Spreadsheet range in Google Apps Script
背景
我制作了一个 Google 表单,目的是将文本项轻松添加到电子表格数据库中。 Form 的一些必要输入来自列表或多项选择,需要在添加新项目后更新。我四处寻找解决方案并从 YouTube 视频中复制了一段代码。
问题
我正在使用允许添加项目的范围,即 A2:A1000,不幸的是,它还在我的表单列表中添加了 900 多个空选项。如何省略要添加到我的表单中的空单元格?
免责声明
我是 Google Apps 脚本的新手,所以我不太了解 'UpdateListInForm' 功能。如果您知道我走错了方向,我很乐意接受任何关于优化代码的建议。
代码
//Form ID
var FORM_ID = '1xdmeGyxiQpY00tO_EZMV9jgnUBn8MgiodxcM9NrGHJ8';
//sheet name with a list
var CONTINENT_SHEET_NAME = 'List';
//range of continents
var range = 'A2:A1000';
//list id (before run getItemsOfForm function andlook at log CTRL+Enter)
var CONTINENT_ID = '1237940710';
function updateListInForm() {
var values_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONTINENT_SHEET_NAME).getRange(range).getValues();
values_[0][0] = values_[0][0].toString();
for(var i = 1; i < values_.length; i++){
values_[0].push(values_[i][0].toString())
}
var form = FormApp.openById(FORM_ID);
var list = form.getItemById(CONTINENT_ID);
list.asListItem().setChoiceValues(values_[0]);
}
function getItemsOfForm(){
var form = FormApp.openById(FORM_ID);
var items = form.getItems(FormApp.ItemType.LIST);
for(var i in items){
Logger.log('id: ' + items[i].getId() + 'title: ' + items[i].getTitle());
}
}
最简单的方法是在将值推入 values_[0]
数组之前评估该值不是空字符串。为此,请替换
values_[0].push(values_[i][0].toString())
来自
if(values_[i][0].toString()!="") values_[0].push(values_[i][0].toString())
一个更优雅的解决方案将通过某种方式取代硬编码引用 A2:A1000 的使用,以获得您需要的范围。为此,您可以使用 getDataRange(), getLastRow() 等。
背景
我制作了一个 Google 表单,目的是将文本项轻松添加到电子表格数据库中。 Form 的一些必要输入来自列表或多项选择,需要在添加新项目后更新。我四处寻找解决方案并从 YouTube 视频中复制了一段代码。
问题
我正在使用允许添加项目的范围,即 A2:A1000,不幸的是,它还在我的表单列表中添加了 900 多个空选项。如何省略要添加到我的表单中的空单元格?
免责声明
我是 Google Apps 脚本的新手,所以我不太了解 'UpdateListInForm' 功能。如果您知道我走错了方向,我很乐意接受任何关于优化代码的建议。
代码
//Form ID
var FORM_ID = '1xdmeGyxiQpY00tO_EZMV9jgnUBn8MgiodxcM9NrGHJ8';
//sheet name with a list
var CONTINENT_SHEET_NAME = 'List';
//range of continents
var range = 'A2:A1000';
//list id (before run getItemsOfForm function andlook at log CTRL+Enter)
var CONTINENT_ID = '1237940710';
function updateListInForm() {
var values_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONTINENT_SHEET_NAME).getRange(range).getValues();
values_[0][0] = values_[0][0].toString();
for(var i = 1; i < values_.length; i++){
values_[0].push(values_[i][0].toString())
}
var form = FormApp.openById(FORM_ID);
var list = form.getItemById(CONTINENT_ID);
list.asListItem().setChoiceValues(values_[0]);
}
function getItemsOfForm(){
var form = FormApp.openById(FORM_ID);
var items = form.getItems(FormApp.ItemType.LIST);
for(var i in items){
Logger.log('id: ' + items[i].getId() + 'title: ' + items[i].getTitle());
}
}
最简单的方法是在将值推入 values_[0]
数组之前评估该值不是空字符串。为此,请替换
values_[0].push(values_[i][0].toString())
来自
if(values_[i][0].toString()!="") values_[0].push(values_[i][0].toString())
一个更优雅的解决方案将通过某种方式取代硬编码引用 A2:A1000 的使用,以获得您需要的范围。为此,您可以使用 getDataRange(), getLastRow() 等。