【问题标题】:Sort Range Values without sorting the spreadsheet对范围值进行排序而不对电子表格进行排序
【发布时间】:2014-09-02 12:28:01
【问题描述】:

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

谢谢。

【问题讨论】:

  • 究竟什么是“公式”?它需要什么论据?
  • 我想它是表单本身,但你应该在展示代码示例时显示每个变量定义......以避免混淆和错误的答案。

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


【解决方案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);

谢谢。

马克。

【讨论】:

  • 很高兴你让它工作了,但是 sort 肯定应该在字符串数组上工作,所以也许你遇到了数组问题(logger.log 在这里有帮助)。请参阅上面的 Serge 的(Gapps script Legend)评论......谷歌应用程序是 javascript 和他们自己的一些库的混合,我知道它 100% 毫无疑问它绝对会是 javascript 字符串数组中的.sort() 会做诀窍。
  • @Kevrone:谢谢 :-) @MarcJordi:请看一下最近的这篇文章,它展示了如何对二维数组进行排序:stackoverflow.com/questions/26300610/…(另请阅读 cmets)
【解决方案2】:

您应该有一个来自 getValues() 方法的名为 values 的数组。只需对值进行排序,而不是对范围进行排序......

var values = range.getValues();
values.sort();

【讨论】:

  • this doc 可以帮助我们走得更远;-)
【解决方案3】:

我建议您在项目中添加一个带有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;
}

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 2015-06-03
    • 2019-11-27
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2013-11-29
    • 2016-09-06
    相关资源
    最近更新 更多