排序范围值而不对电子表格进行排序
我从电子表格中捕获未排序的范围以在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);
感谢。
您应该有一个名为getValues()方法中的值的数组。只需对数值进行排序而不是范围...
var values = range.getValues();
values.sort();
[这个文档](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)可以帮助进一步;-) – 2014-09-02 16:17:06
对于“formulari”的错误信息,我很抱歉。这是一个表单类。
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);
感谢。
Marc。
很高兴你有它的工作,但是,应该肯定在一个字符串数组上工作,所以也许你有一个数组问题(logger.log帮助这里)。请参阅上面的Serge's(Gapps脚本传奇)评论... Google应用程序是JavaScript和一些自己的库的混合体,我毫无疑问知道它100%,它绝对会在JavaScript字符串数组中的be.sort()诀窍。 – Kevrone 2014-09-05 21:36:40
@ Kevrone:谢谢:-) @MarcJordi:请看看最近的帖子,它展示了如何对2D数组进行排序:http://*.com/questions/26300610/google-script-sort-2d-array逐个列(也请阅读评论) – 2014-10-10 22:45:20
我建议你在你的项目中添加一个代码文件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;
}
究竟是什么 “formulari”?需要什么论证? – 2014-09-02 14:20:05
我想它是表单本身,但是在呈现代码示例时应该显示每个变量的定义......以避免混淆和错误答案。 – 2014-09-02 15:18:10