我有一个包含几个列的电子表格,我需要对这些列进行单独排序。我编写了下面的脚本,但速度有点慢,因为它使用getValues()和setValues()依次处理每一列。我想找到一种在数组级别上进行整个排序的方法,以提高效率,但我不知道如何.有什么建议吗?
下面是我现在使用的代码的相关部分:
...
sh3.getRange(1,1,1,newData[0].length).setFontWeight('bold');// newData is an array corresponding to the whole sheet
for(col=1;col<newData[0].length;++col){
var val = sh3.getRange(2,col,getLastRowInCol(col),1).getValues().sort();// each column have a different height
sh3.getRange(2,col,getLastRowInCol(col),1).setValues(val)
}
}
function getLastRowInCol(col){
var values = sh3.getRange(2,col,sh3.getLastRow(),1).getValues();// skip header and find last non empty row in column
for(n=0;n<values.length;++n){
if(values[n]==''){break}
}
return n
}注意:我知道有一个https://sites.google.com/site/scriptsexamples/custom-methods/2d-arrays-library来完成这项工作(在2D数组中对列进行排序),但是为了提高个人JS的技能,我需要“手动”进行排序;-)而且我还需要独立地对每一列进行排序,而不需要为每一列更新工作表。
发布于 2013-01-12 16:29:15
不如:
function sortColumns() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var startCol = 1;
var dataRange = sheet.getRange(startRow, startCol, sheet.getLastRow() - startRow + 1, sheet.getLastColumn() - startCol + 1);
var data = dataRange.getValues();
// transpose data so each column item will be listed in an single array
// for each column so that it can be sorted with array.sort()
var rowToCol = [];
for (var i = 0; i < data[0].length; i++) {
rowToCol.push([]);
for (var j = 0; j < data.length; j++) {
// replace empty string with undefined as undefined sorts last
rowToCol[i].push(data[j][i]==""?undefined:data[j][i]);
}
rowToCol[i].sort();
// default sort, as above, is alphabetic ascending. For other methods
// search for Javascript array sort functions
}
// transpose sorted items back to their original shape
var result = [];
for (var i = 0; i < rowToCol[0].length; i++) {
result.push([]);
for (var j = 0; j < rowToCol.length; j++) {
result[i].push(rowToCol[j][i]==undefined?"":rowToCol[j][i]);
}
}
dataRange.setValues(result);
};
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Sort Columns",
functionName : "sortColumns"
}];
sheet.addMenu("Script Center Menu", entries);
};https://stackoverflow.com/questions/14292917
复制相似问题