我从电子表格中捕获未排序的范围,以在Google表单中创建ListItem。我希望这个列表项按字母顺序排序,但是一旦我得到范围,如果我使用range.sort(),它也会对电子表格中的数据进行排序。有关如何对值进行排序而不是电子表格的任何建议吗?
到目前为止,我有这段代码:
//Import Clients List
var sheetClients = ss.getSheetByName("Clients");
var range = sheetClients.getRange(1, 1, sheetClients.getLastRow());
range.sort(1);
var values = range.getValues();
var item = formulari.addListItem();
item.setTitle("Client");
item.setChoiceValues(values);
感谢。
答案 0 :(得分:1)
你应该有一个来自getValues()方法的名为values的数组。只需对值进行排序,而不是范围....
var values = range.getValues();
values.sort();
答案 1 :(得分:1)
对于关于“公式”的错误信息,我感到很遗憾。这是一个表格类。
values.sort();不能用作sort();仅适用于不在字符串数组中的范围类,因为值为。
我使用这个新库https://sites.google.com/site/scriptsexamples/custom-methods/2d-arrays-library
找到了解决方案新代码如下:
//Import Clients List
var sheetClients = ss.getSheetByName("Clients");
var range = sheetClients.getRange(1, 1, sheetClients.getLastRow());
// CHANGE HERE from range.sort( 1 )
var new_range = ArrayLib.sort( range , 1 , true );
var values = new_range.getValues();
var item = formulari.addListItem();
item.setTitle("Client");
item.setChoiceValues(values);
感谢。
马克。
答案 2 :(得分:0)
我建议您在项目中添加underscore.js的代码文件,然后使用这些功能进行排序和过滤(以及更多精彩内容)。
为例
function getListClients() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Clients');
var range = sheet.getRange( "A1:A" + sheet.getMaxRows()).getValues();
// using Underscore.js
var arrayClients = _.chain(range).flatten().uniq().without('').value();
return arrayClients;
}