SORT function

The SORT function sorts the contents of a range or array.

<p>The SORT function returns a sorted array of the elements in an array. The returned array is the same shape as the provided array argument. For example: </p> <pre><code class="hljs js language-js">=SORT(array, sort_index?, sort_order?, by_col?) </code></pre> <table border="1" style="border-collapse: collapse;width:90%;"> <tbody> <tr> <th style="width: 20%;">Argument</th> <th style="width: 10%;">Required</th> <th style="width: 70%;">Description</th> </tr> <tr> <td>array</td> <td>Y</td> <td>The range, or array to sort</td> </tr> <tr> <td>[sort_index]</td> <td>N</td> <td>A number indicating the row or column to sort by</td> </tr> <tr> <td>[sort_order]</td> <td>N</td> <td>A number indicating the desired sort order; 1 for ascending order (default), -1 for descending order</td> </tr> <tr> <td>[by_col]</td> <td>N</td> <td>A logical value indicating the desired sort direction; false to sort by row (default), true to sort by column</td> </tr> </tbody> </table> <p><strong>Note:</strong> </p> <ul> <li>The SORT function is only valid when <code>allowDynamicArray</code> is true. </li> <li>The SORT function will return an array, which will spill if it's the final result of a formula. </li> <li>Where sort<em>index is not provided, row1/col1 will be presumed. Where order is not provided, ascending order will be presumed. By default sort by row, and will only sort by column where by</em>col is true. When by_col is false or missing will sort by row. </li> <li>The SORT function is provided to sort data in an array. If you want to sort data in the grid, it's better to use the SORTBY function, as it is more flexible. SORTBY will respect column additions/deletions, because it references a range, where SORT references a column index number.</li> <li>An array can be thought of as a row of values, a column of values, or a combination of rows and columns of values. </li> </ul>
window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(_getElementById("ss")); initSpread(spread); }; var demoData = [ ["Region","Sales Rep","Product","Units"], ["East","Tom","Apple",6380], ["West","Fred","Grape", 5619], ["North ","Amy","Pear", 4565], ["South","Sal","Banana", 5323], ["East","Fritz","Apple", 4394], ["West","Sravan","Grape", 7195], ["North ","Xi","Pear", 5231], ["South","Hector","Banana", 2427], ["East","Tom","Banana", 4213], ["West","Fred","Pear", 3239], ["North ","Amy","Grape", 6420], ["South","Sal","Apple", 1310], ["East","Fritz","Banana", 6274], ["West","Sravan","Pear", 4894], ["North ","Xi","Grape", 7580], ["South","Hector","Apple", 9814] ]; function initSpread(spread) { spread.options.allowDynamicArray = true; var sheet = spread.getActiveSheet(); spread.suspendPaint(); spread.suspendCalcService();'SORT'); sheet.defaults.colWidth = 80; sheet.setColumnWidth(0, 20); sheet.setColumnWidth(1, 20); sheet.setText(0, 1, 'Use the SORT function to sort a range or array in ascending or descending order. Syntax: SORT(array,[sort_index],[sort_order],[by_col])'); var row = 2; var col = 2; applyTableStyleForRange(sheet, row, col, 11, 1); applyTableStyleForRange(sheet, row, col + 2, 11, 1); sheet.setText(row - 1, col + 2, 'Sort data in descending order: SORT(C4:C13,1,-1)'); sheet.setArray(row, col, [['Units'], [622], [961], [691], [445], [378], [483], [650], [783], [142], [404]]); sheet.setText(row, col + 2, 'Units'); sheet.setFormula(row + 1, col + 2 , 'SORT(C4:C13,1,-1)'); row = 15; var col2 = col + 5; sheet.setText(row - 1, col2, 'Sort range C17:F32 by Units: SORT(C17:F32,4,1,FALSE)'); var rowCount = 17; applyTableStyleForRange(sheet, row, col, rowCount, 4); applyTableStyleForRange(sheet, row, col2, rowCount, 4); sheet.setArray(row, col, demoData); sheet.setArray(row, col2, [["Region","Sales Rep","Product","Units"]]); var formatter = '#,##0'; sheet.getRange(row + 1, col + 3, rowCount - 1, 1).formatter(formatter); sheet.getRange(row + 1, col2 + 3, rowCount - 1, 1).formatter(formatter); sheet.setFormula(row + 1, col2, 'SORT(C17:F32,4,1,FALSE)'); spread.resumeCalcService(); spread.resumePaint(); } function applyTableStyleForRange(sheet, row, col, rowCount, colCount, options) { var tableName = "tmpTable"; var TableThemes = GC.Spread.Sheets.Tables.TableThemes; // use table to help set style then remove like convert table to range in Excel sheet.tables.add(tableName, row, col, rowCount, colCount, TableThemes.medium7, options); sheet.tables.remove(tableName, 2 /* keep style */); } function _getElementById(id) { return document.getElementById(id); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/purejs/node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/en/purejs/node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" style="width:100%; height: 100%"></div> </div></body> </html>
.sample { position: relative; height: 100%; overflow: auto; } .sample::after { display: block; content: ""; clear: both; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-row { font-size: 14px; padding: 5px; margin-top: 10px; } .option-group { margin-bottom: 6px; } label { display: block; margin-bottom: 6px; } input { margin-bottom: 5px; padding: 2px 4px; width: 100%; box-sizing: border-box; } input[type=button] { margin-bottom: 6px; } hr { border-color: #fff; opacity: .2; margin: 5px 0; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }