2014-09-02 120 views
0

我從電子表格中捕獲未排序的範圍以在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

究竟是什麼 「formulari」?需要什麼論證? – 2014-09-02 14:20:05

+0

我想它是表單本身,但是在呈現代碼示例時應該顯示每個變量的定義......以避免混淆和錯誤答案。 – 2014-09-02 15:18:10

回答

1

您應該有一個名爲getValues()方法中的值的數組。只需對數值進行排序而不是範圍...

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

[這個文檔](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)可以幫助進一步;-) – 2014-09-02 16:17:06

1

對於「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。

+1

很高興你有它的工作,但是,應該肯定在一個字符串數組上工作,所以也許你有一個數組問題(logger.log幫助這裏)。請參閱上面的Serge's(Gapps腳本傳奇)評論... Google應用程序是JavaScript和一些自己的庫的混合體,我毫無疑問知道它100%,它絕對會在JavaScript字符串數組中的be.sort()訣竅。 – Kevrone 2014-09-05 21:36:40

+0

@ Kevrone:謝謝:-) @MarcJordi:請看看最近的帖子,它展示瞭如何對2D數組進行排序:http://stackoverflow.com/questions/26300610/google-script-sort-2d-array逐個列(也請閱讀評論) – 2014-10-10 22:45:20

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; 
} 
相關問題