下面是我要变成较大代码一部分的代码。有一点背景是我试图列出一个工作表名称,我可以将其制成数据验证列表。然后进入我选择的工作表,并从该工作表创建另一个数据验证列表。 (这一切都发生在我的主表中)下面的代码是我与googleclock配对的自定义公式。它创建一个列表,然后使用该列表创建我的数据验证列表。我试图编写的代码是我跳过中间人并使之动态的方式。
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。
答案 0 :(得分:0)
尝试一下:
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()
}
答案 1 :(得分:0)
因此,由于在某些方面缺少我的问题,所以我决定只解决该问题并加以解决。然后分享我的发现!以下是一个脚本,该脚本列出了所有工作表标签的名称,然后使用该列表,我使用了一个宏来制作数据验证列表。脚本的最后一部分着眼于我的数据验证选项,并使用来自特定工作表名称的项目列表自动填充其余行。
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”脚本并将其直接转换为数据验证列表。任何帮助将非常感激。
我要创建的工作簿应该有助于创建订单,而我为此制作的较大版本带有价格。这可能是一个小众脚本的想法,但我希望它是有用的。
让我知道您的想法! (下面的链接)