我在Google應用程序中爲電子表格構建了一個腳本,讓我可以隱藏H列中包含星號(*)的行。電子表格目前有700多行,當我運行腳本時,大約需要90秒才能完成,我可以看到結果。 Aint'沒有人花時間來處理數據,所以我正在努力提高效率。在90秒以上的谷歌應用程序腳本中提高性能
這就是拼湊在一起的代碼的樣子,我不知道如何將其重寫得更快。我在這裏得到靈感; Hide Rows in a Google Spreadsheet based on first Character in a cell
/**
* Hides rows where H = Astrisk, Unhides where H != Astrisk
*/
function updateProgram() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Week 1-4");
var data = sheet.getRange('H:H').getValues();
//iterate over all rows
for(var i=0; i< data.length; i++){
//compare first character, if asterisk, then hide row
if(data[i][0].charAt(0) == '*'){
sheet.hideRows(i+1);
} else sheet.showRows(i+1);
}
}
這是目前在所有行運行,並在一個單一的條件執行功能,並在每一行執行的功能。我曾考慮過這個可能的解決方案;
- 如果H = * ||行顯示然後隱藏
- 如果H!= * ||行被隱藏然後顯示
- 否則什麼都不做
所以只有那些需要隱藏行/放映得到它。
感謝您花時間閱讀本文 - 如果您能幫助我,我將非常感謝!
UPDATE;
我想出了一種分組行的方法,顯示和隱藏了一些依賴於值的行。代碼現在看起來像這樣,需要10秒鐘才能運行。
這是我第一次自行編寫的代碼,歡迎任何反饋!
function updateProgramWeek1to4() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Week 1-4");
var row = s.getRange('G:G').getValues();
var maxRows = s.getMaxRows();
s.showRows(1, maxRows);
for(var i=0; i< row.length; i++){
if(row[i] == '0'){
s.hideRows(i+1, 11);
}
else if(row[i] == '1'){
s.hideRows(i+3, 9);
}
else if(row[i] == '2'){
s.hideRows(i+4, 8);
}
else if(row[i] == '3'){
s.hideRows(i+5, 7);
}
else if(row[i] == '4'){
s.hideRows(i+6, 6);
}
else if(row[i] == '5'){
s.hideRows(i+7, 5);
}
else if(row[i] == '6'){
s.hideRows(i+8, 4);
}
else if(row[i] == '7'){
s.hideRows(i+9, 3);
}
else if(row[i] == '8'){
s.hideRows(i+10, 2);
}
else if(row[i] == '9'){
s.hideRows(i+11, 1);
}
else if(row[i] == '10'){
s.hideRows(i+12);
}
else if(row[i] == '11'){
s.hideRows(i+1);
}
}
}
謝謝 - 代碼現在已更新! – user2845885
查看如何執行此操作的示例代碼:https://productforums.google.com/d/msg/docs/1qHnz9qtb18/vTKtearoBgAJ –