排序范围值而不对电子表格进行排序

时间:2014-09-02 12:28:01

标签: google-apps-script google-spreadsheet-api google-form

我从电子表格中捕获未排序的范围,以在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);

感谢。

3 个答案:

答案 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;
}