我有一張電子表格,當我處理文檔時,我想多次排列多列。這是一個使用GUI的多步驟過程,看起來太耗時。我必須檢查標題行的框,設置第一個排序參數,然後再添加一個。唷!它變得很快。Google Apps腳本:在腳本中排序時可以指定標題行嗎?
排序表是沒有問題的,但標題行也排序!我沒有找到任何方法來指定我有一個標題行作爲sort()函數的參數,我也沒有看到任何方法來全局定義將被sort()自動注意到的標題行。
取而代之,我保存了標題行,刪除了第一行,對錶單進行排序,在最上面插入了一個新行,重新創建了標題行,並格式化了標題行。哇!編寫並不需要很長時間,它運行良好,但它非常複雜!
從用戶角度來看,標題行在彈出備份之前會短暫消失。這並不是太糟糕,但顯然有些事情正在發生。
因此,最後我解決了我的問題:我在排序時忽略了承認標題行存在的能力嗎?或者,排序帶有腳本中的標題行的工作表是否也對標題行進行排序,而沒有追索權?
如果我的方法或類似方法需要避免在排序過程中包含標題行,是否有某處我可以通知Google Apps團隊,以便他們可以考慮添加此功能?由於使用簡單的複選框指定存在標題行的存在,我希望它存在或可以在腳本中排序時添加。
編輯
我的原代碼(與文檔/註釋去掉):
sheet.deleteRow(1);
rows.sort([<1st col>, <2nd col>]);
sheet.insertRowsBefore(1, 1);
for (var j = 0; j <= (numCols - 1); j++) {
sheet.getRange(1, (j + 1)).setValue(firstRow[j]);
}
sheet.getRange(1, 1, 1, numCols).setFontWeight("bold");
sheet.getRange(1, 1, 2, numCols).setBorder(true, true, true, true, true, true);
我在的地方,上面的代碼感謝已經試過了托馬斯的建議:
sheet.setFrozenRows(1);
sheet.sort(<2nd col>);
sheet.sort(<1st col>);
sheet.setFrozenRows(0);
不幸的是,這只是按列而不是按行排序。用第一個代碼塊中的rows.short();
行代替2 sheet.sort();
調用不起作用。嘗試這樣會導致我在我的評論中報告的最初問題,其中標題行與其他數據一起排序,即使第一行在排序之前被凍結。
此外,除非在此之下添加另一行代碼,否則我將在電子表格的頂部獲得永久「正在工作...」通知。但是,它似乎並沒有影響任何東西。
在所有情況下,var sheet = SpreadsheetApp.getActiveSheet();
,var rows = sheet.getDataRange();
和firstRow
是標題行數據的數組。
SpreadsheetApp。flush()確實是一個有趣的想法;-)我想你的建議會導致考慮在數組上進行排序而不是在表單本身上......它可能會更有效率,你不覺得嗎? –
噢,肯定是嗶嘰,我應該明確表示,我的答案的第一部分是我的一個「正確的」答案,第二部分是對第二個問題的答案。 – AdamL
呃!只需排除我排序的行中的第一行。它的工作原理很明顯,理解和維護起來更簡單。它似乎運行緩慢,但我懷疑這是運行排序方法的功能(手動設置排序需要相當長的時間)。謝謝!我將此標記爲答案。順便說一句,添加'SpreadsheetApp.flush();'沒有幫助。但是,謝謝你的偉大建議! – evanshultz