下面是我试图将其转化为更大代码的一部分的代码。一个小背景是,我正在尝试制作一个工作表名称列表,我可以将其制作成一个数据验证列表。然后进入我选择的工作表,并从该工作表中创建另一个数据验证列表。(这一切都发生在我的主页上(下面的代码是我与谷歌时钟配对的自定义公式。它创建了一个列表,然后我使用该列表创建我的数据验证列表。我试图编写的代码是我跳过中间人并使其动态化的方式。
function sheetnames() {
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=2 ; i<sheets.length ; i++) out.push( [
sheets[i].getName() ] )
return out
}
如何跳过中间人并创建名称的数据验证列表(基于表外选项卡名称(?
如果有帮助的话,我还让所有的工作表名称自动填充每个工作表中的单元格A1。
试试这个:
function sheetnames() {
var out=[];
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
for(var i=2;i<sheets.length;i++){
out.push([sheets[i].getName()]);
}
return out;//this is a 2d column array, hence useable in setValues()
}
因此,由于我的问题在某些方面缺乏,我决定只处理这个问题并解决它。然后分享我的发现!下面是一个脚本,它列出了所有工作表选项卡的名称,然后使用该列表,我使用了一个宏来创建数据验证列表。脚本的最后一部分查看我的数据验证选择,并使用特定工作表名称中的项目列表自动填充其余行。
function listSheetNames() {
var names = SpreadsheetApp.getActive().getSheets()
.map(function(s) {
return [s.getName()];
})
SpreadsheetApp.getActive().getSheets()[0]
.getRange(1, 1, names.length, names[0].length).setValues(names)
Logger.log(names);
}
function onEdit () {
var data = SpreadsheetApp.getActiveSpreadsheet();
var ordersheet = SpreadsheetApp.getActiveSheet();
var reference = ordersheet.getActiveCell().getValue();
var range = ordersheet.getRange(2, 1, ordersheet.getLastRow()).getValues();
if(reference = range) {
var sheetName = ordersheet.getActiveCell().getValue();
var pullName = data.getSheetByName(sheetName);
var datass = pullName.getRange(1, 1, pullName.getLastRow(), 1).getValues();
var validationRule = SpreadsheetApp.newDataValidation().requireValueInList(datass).build();
ordersheet.getActiveCell().offset(1, 0, 100).setDataValidation(validationRule);
Logger.log(pullName);
}}
所以这是一个小问题。我仍在试图弄清楚如何使用我的"listSheetnames"脚本,并将其直接转换为数据验证列表。任何帮助都将不胜感激。
我试图创建的工作簿应该有助于创建订单表,我制作的较大版本附带了价格。这可能是一个小众的脚本想法,但我希望它是有用的。
让我知道你的想法!(链接如下(
使用表单名称进行数据验证