我写了这个函数,在我的电子表格的非使用单元格中插入一个下拉列表:
function insertDropdownList(folderID){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var options = [];
Logger.log("options = " + options);
var folder = DocsList.getFolderById(folderID);
var files = folder.getFiles();
for (var i in files) {
var item = files[i].getName();
Logger.log("item = " + item);
options.push(item);
}
Logger.log("options2 = " + options);
var range = sheet.getRange(lastRow+1, getColumnNrByName(sheet, "COLUMN NAME")+1, sheet.getMaxRows());
var rule = SpreadsheetApp.newDataValidation().requireValueInList(options, false).build();
range.setDataValidation(rule);
}
但是尽管options
数组没有问题,但是在预期内容中,插入单元格中的下拉列表会根据文件标题中的逗号进行拆分。这些文件:
成为此下拉列表(其中Larry Page名称被拆分为另一个项目,而不是两个名称的一部分):
我尝试过这样的事情:options.push([item]);
和"Larry Page, on Why Moon Shots Matter"
。但没有任何效果。如何解决这个问题?
答案 0 :(得分:4)
我不相信您可以将逗号保留在选项列表中。 javascript中没有逗号的转义字符。并且您的选项数组最终为单个字符串,然后使用逗号作为分隔符进行拆分。可视化正在发生的事情的最简单方法是通过UI查看数据验证。
最简单的解决方法是用另一个分隔符替换逗号。 E.g。
var item = files[i].getName().replace(',',' -');
我认为这样做的另一种方式是更接近您要查找的内容,将填充隐藏列/表中的文件名列表,并使用.requreValueInRange。这样就可以使用逗号进行正确的格式化。
function setList() {
try{
var folderId = '0B899iW4paMb-RUGUdHRtYzJwQTQ';
insertDropdownList(folderId);
}catch(err){
Logger.log(err.lineNumber + ' - ' + err);
}
}
function insertDropdownList(folderID){
try{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// use fileRange to store list of file names for validation selection
var fileRange = sheet.getRange("K1");
var lastRow = sheet.getLastRow();
var options = [];
var r = 0; // counter for rows when populating file list from Drive
var folder = DriveApp.getFolderById(folderID);
var files = folder.getFiles();
while(files.hasNext()){
var item = files.next().getName();
fileRange.offset(r,0).setValue(item);
r += 1;
}
var fileListRange = sheet.getRange("K1:K" + (r+1));
var range = sheet.getRange(1, 1, lastRow,1);
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(fileListRange,false).build();
range.setDataValidation(rule);
sheet.hideColumn(fileListRange); // hide the validation column
}catch(err){
Logger.log(err.lineNumber + ' - ' + err);
}
}
答案 1 :(得分:0)
您可以尝试使用,