1
我有我們公司的時間表電子表格,我需要按每個時間表塊(15行20列)對員工進行排序。我有我有幫助的下面的代碼,但是當數組到達一個沒有員工名字的塊時,數組就會退出排序(我希望這些代碼被拖到底部)。我遇到的另一個複雜情況是這些單元格中有許多公式,當我按原樣運行它時,它會將其刪除。我想盡可能保持這些完好無損。下面的代碼:排序數組中的範圍
function sortSections()
{
var activeSheet = SpreadsheetApp.getActiveSheet();
//SETTINGS
var sheetName = activeSheet.getSheetName(); //name of sheet to be sorted
var headerRows = 53; //number of header rows
var pageHeaderRows = 5; //page totals to top of next emp section
var sortColumn = 11; //index of column to be sorted by; 1 = column A
var pageSize = 65;
var sectionSize = 15; //number of rows in each section
var col = sortColumn-1;
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var data = sheet.getRange(headerRows+1, 1, sheet.getMaxRows()-headerRows, sheet.getLastColumn()).getValues();
var data3d = [];
var dataLength = data.length/sectionSize;
for (var i = 0; i < dataLength; i++) {
data3d[i] = data.splice(0, sectionSize);
}
data3d.sort(function(a,b){return(((a[0][col]<b[0][col])&&a[0][col])?-1:((a[0][col]>b[0][col])?1:0))});
var sortedData = [];
for (var k in data3d) {
for (var l in data3d[k]) {
sortedData.push(data3d[k][l]);
}
}
sheet.getRange(headerRows+1, 1, sortedData.length, sortedData[0].length).setValues(sortedData);
感謝您抽空看看這個。不幸的是,這隻能排序連續的行。我需要每排15行的部分;在第54行,我在第11欄有一個員工姓名,下面有14行屬於該員工,那麼下一部分從第69行開始,等等。我需要下面的14行來跟隨每個部分的最上面一行,併發送任何空白部分(不包括員工姓名)到最後。爲了在每4個部分之後添加皺紋,我想保持原樣保留5行(仍在等待Google電子表格中包含分頁符)。 – cocky2012
@ user1637113,可以迭代每個部分,將每個部分作爲範圍並對其進行排序。我只舉了一個例子,而不是一個完整的解決方案。 – megabyte1024
我對此很新,所以請忍受我;我會爲每個部分創建一個var,然後通過每個部分的單元格引用對變量進行排序?或者我可以在工作表本身創建範圍並對其進行排序? – cocky2012