Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在Google Sheets中,使用应用程序脚本设置动态下拉列表_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在Google Sheets中,使用应用程序脚本设置动态下拉列表

Google apps script 在Google Sheets中,使用应用程序脚本设置动态下拉列表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试使用Apps脚本在Google工作表中设置一个动态下拉列表。除了在必要的单元格中设置数据验证外,我设法使大多数部件正常工作: function sheetByName(ssId, sheetName) { var ss = SpreadsheetApp.openById(ssId); var sheet = ss.getSheetByName(sheetName); return sheet; }; function columnByName(sheet, column

我正在尝试使用Apps脚本在Google工作表中设置一个动态下拉列表。除了在必要的单元格中设置数据验证外,我设法使大多数部件正常工作:

function sheetByName(ssId, sheetName) {
  var ss = SpreadsheetApp.openById(ssId);
  var sheet = ss.getSheetByName(sheetName);

  return sheet;
};

function columnByName(sheet, columnName) {
  var data = sheet.getDataRange().getValues();
  var column = data[0].indexOf(columnName);

  return column;
};

function columnValues(sheet, index) {
  var data = sheet.getDataRange().getValues();
  var values = [];
  
  for(n=1; n<data.length; ++n) {
    values.push(data[n][index]);
  }

  return values;
}

function columnSetDataValidation(sheet, index, options) {
  var data = sheet.getDataRange().getValues();
  var rule = SpreadsheetApp.newDataValidation()
    .requireValueInList(options)
    .setAllowInvalid(true)
    .build();

  for(n=1; n<data.length; ++n) {
    var cell = data[n][index];
  };
};

function dropDownBedrijven() {
  var sheetCollegas = sheetByName("<<ID HERE>>", "Collegas");
  var sheetBedrijven = sheetByName("<<ID HERE>>", "Bedrijven");
  
  var getColumnIndexInBedijven = columnByName(sheetBedrijven, "Bedrijf");
  var getColumnIndexInCollegas = columnByName(sheetCollegas, "Bedrijf");

  var bedrijven = columnValues(sheetBedrijven, getColumnIndexInBedijven).filter(item => item);  

  columnSetDataValidation(sheetCollegas, getColumnIndexInCollegas, bedrijven);
  
};
函数sheetByName(ssId,sheetName){
var ss=电子表格应用程序openById(ssId);
var sheet=ss.getSheetByName(sheetName);
报税表;
};
函数columnByName(工作表,columnName){
var data=sheet.getDataRange().getValues();
var column=data[0]。indexOf(columnName);
返回列;
};
函数列值(表、索引){
var data=sheet.getDataRange().getValues();
var值=[];
用于(n=1;n项);
columnSetDataValidation(sheetCollegas、getColumnIndexInCollegas、bedrijven);
};
我无法获取函数
columnSetDataValidation
在所需单元格中设置数据验证

你知道怎么做吗?

试试这个:

function columnSetDataValidation() {
  const ss=SpreadsheetApp.getActive();
  const sheet=ss.getSheetByName('Sheet1');
  const range = sheet.getRange(2,4,sheet.getLastRow()-1);//putting validation in column 4
  const options=[1,2,3,4,5];
  const rule = SpreadsheetApp.newDataValidation()
    .requireValueInList(options)
    .setAllowInvalid(true)
    .build();
  range.setDataValidation(rule);
}
你需要使用一个范围

在函数
columnSetDataValidation
中,您正确构建了规则,但未能将规则分配给某个范围。您正在循环范围的值,然后更改
var单元格的值
,直到循环结束。您没有调用
range.setDataValidation(规则)

请尝试以下解决方案:

函数列SetDataValidation(工作表、索引、选项){
var range=sheet.getDataRange();
var rule=SpreadsheetApp.newDataValidation()
.RequiremeEinList(选项)
.setAllowInvalid(true)
.build();
对于(n=1;n

参考资料:

如果是,那么工作表是空白的getDataRange()get's NothingHanks,就像一个符咒!为了得到我想要的结果,我做了一些小的调整。但你真的帮了我。谢谢你调查此事。我选择了张贴的解决方案天线,因为它正好符合我的目的。