Google apps script GoogleApps脚本-电子表格-基于非电子表格中的值在单元格中创建OneEdit下拉列表
我已经看到了一些例子,说明了如何根据来自其他电子表格范围值的值创建下拉列表,下拉列表取决于单元格值。在我看到的所有示例中,值都来自其他电子表格中的范围值 我想要实现的是:Google apps script GoogleApps脚本-电子表格-基于非电子表格中的值在单元格中创建OneEdit下拉列表,google-apps-script,google-sheets,dropdown,Google Apps Script,Google Sheets,Dropdown,我已经看到了一些例子,说明了如何根据来自其他电子表格范围值的值创建下拉列表,下拉列表取决于单元格值。在我看到的所有示例中,值都来自其他电子表格中的范围值 我想要实现的是: 在带有列标题的电子表格中,我没有行 当我编辑第一个单元格时,它会显示一个带有值的下拉列表。仅当我编辑单元格时。如果可能的话,我不希望为固定数量的行预填充st列的单元格,因为我认为这可能会消耗时间,而且我不知道一个月内文件中将有多少单元格 下拉列表中的值是从另一个Google Workspace服务检索的 我当时的经历:
- 在带有列标题的电子表格中,我没有行
- 当我编辑第一个单元格时,它会显示一个带有值的下拉列表。仅当我编辑单元格时。如果可能的话,我不希望为固定数量的行预填充st列的单元格,因为我认为这可能会消耗时间,而且我不知道一个月内文件中将有多少单元格
- 下拉列表中的值是从另一个Google Workspace服务检索的
- 我能够检索我想在下拉列表中显示的值
- 如果我是对的,要构建下拉列表,需要使用SpreadsheetApp.newDataValidation()方法来构建下拉列表
- 我的值存储在一个二维数组中,因为这似乎是将值传递到一系列单元格的方法,这些单元格被传递到前一个方法的参数中,最后是Build方法
- 我能够为一系列单元格(例如:A1:A10)设置值,并在每个单元格上显示一个下拉列表图标,但编辑单元格时显示的值类似于val1;val2;val3
- 当我编辑单元格时,如何在第一列的单元格上动态创建一个动态下拉列表?如果必须预先填充第一列的单元格,那么至少为什么不呢
var v_spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var v_sheet = v_spreadsheet.getActiveSheet();
// I imagine i could specify A1:A1 to specify only the cell that is being edited ?
var range = v_sheet.getRange("A2:A5");
// my array below is 2 dimensions : v_array[0][0] = 'val1', v_array[0][1] = 'val2', etc
range.setValues(v_array_taskLists);
var dd_values = range.getValues();
var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(dd_values).build();
range.setDataValidation(validationRule);
正如您所看到的,我正在传递一个范围数据,这可能不是正确的方式
非常感谢您的帮助
非常感谢您,因为您说您能够检索到要在下拉列表中显示的正确数据。您可以使用此函数来填充它。其中,
range
是单元格的范围,list
是要在下拉列表中显示的值的列表
function setRangeDataValidation(range, list) {
var rangelValidation = SpreadsheetApp.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build();
range.setDataValidation(rangelValidation);
}
您可以使用onChange
触发器动态更改下拉列表中可用的值(这是我在类似应用程序中使用的方法)。假设您希望在另一列中进行某些更改时,在列A
中进行数据验证更改,例如在同一行中进行B
函数更改(e){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var ws=ss.getActiveSheet()
如果(e.changeType===‘编辑’){
var-activeRange=ws.getActiveRange();
var editCol=activeRange.getColumn();
如果(editCol==1){
//如果同时更改了更多行(复制和粘贴)
var numRows=activeRange.getNumRows();
var startRow=activeRange.getRow();
var yourList=//要在下拉列表中更新的列表
//如果希望在B列中为A列中传递的每个值提供不同的下拉列表,则可以循环浏览A列中编辑的值列表。
对于(变量行=0;行
请记住,onChange
触发器是一种可以通过以下方式安装的触发器:
函数createSpreadsheetChangeTrigger(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('onChange')
.前页(ss)
.onChange()
.create();
}
笔记:
- 如果您只需要跟踪电子表格内容的更改,而不需要跟踪其结构,那么使用可安装触发器(而不是触发器)可能更合适
- 通过
触发器安装此触发器不是一个好主意,因为每次打开电子表格时都会安装一个新的触发器,最终会出现许多重复的触发器onOpen