我正在嘗試在 Google Apps 腳本中創建一個編輯函式,該函式會根據在作業表 1(“sessionFocus”)上選擇的復選框自動檢查/更改作業表 2(“interventionSheet”)上某些復選框的格式。作業表 1 上的每個復選框都與作業表 2 上它自己獨特的一組復選框相關聯。我已經弄清楚如何通過使用重復的 if 陳述句來做到這一點,但這會顯著降低處理速度。我正在尋求有關如何使用批處理(陣列、for 陳述句等)來提高代碼效率的幫助。請參閱下面的當前(低效)代碼。
function populateInterventions(e)
{
var sessionFocus = SpreadsheetApp.getActive().getSheetByName('Session Focus');
var interventionSheet = SpreadsheetApp.getActive().getSheetByName('Therapeutic Intervention');
if(e.range.getA1Notation()=='B23')
{
var range3a = interventionSheet.getRangeList(['J78','Q69','Q71','Q72']);
var range3b = interventionSheet.getRangeList(['J78','K78','Q69','R69','Q71','R71','Q72','R72']);
if(sessionFocus.getRange('B23').isChecked()==true)
{
range3a.check();
range3b.setBackground('#cfe2f3');
range3a.setBorder(null,null,null,true,null,null,'#cfe2f3',null);
}
else
{
range3a.uncheck();
range3b.setBackground('#ffffff');
range3a.setBorder(null,null,null,true,null,null,'#ffffff',null);
}
}
if(e.range.getA1Notation()=='B24')
{
var range4a = interventionSheet.getRangeList(['J18','J20','J32','J84','J85']);
var range4b = interventionSheet.getRangeList(['J18','K18','J20','K20','J32','K32','J84','K84','J85','K85']);
if(sessionFocus.getRange('B24').isChecked()==true)
{
range4a.check();
range4b.setBackground('#cfe2f3');
range4a.setBorder(null,null,null,true,null,null,'#cfe2f3',null);
}
else
{
range4a.uncheck();
range4b.setBackground('#ffffff');
range4a.setBorder(null,null,null,true,null,null,'#ffffff',null);
}
}
if(e.range.getA1Notation()=='B26')
{
var range5a = interventionSheet.getRangeList(['J86','J87','N61','Q79','Q80']);
var range5b = interventionSheet.getRangeList(['J86','K86','J87','K87','N61','O61','Q79','R79','Q80','R80']);
if(sessionFocus.getRange('B26').isChecked()==true)
{
range5a.check();
range5b.setBackground('#cfe2f3');
range5a.setBorder(null,null,null,true,null,null,'#cfe2f3',null);
}
else
{
range5a.uncheck();
range5b.setBackground('#ffffff');
range5a.setBorder(null,null,null,true,null,null,'#ffffff',null);
}
}
uj5u.com熱心網友回復:
在這種特定情況下,使用回圈似乎沒有意義,因為腳本具有僅在編輯特定單元格時執行的代碼部分。
為了盡可能提高腳本的執行時間,您必須盡量減少對 Google Apps 腳本服務的呼叫。
- 避免回圈呼叫 Google Apps 腳本服務
- 利用變數
即代替
if(e.range.getA1Notation()=='B23')
if(e.range.getA1Notation()=='B24')
if(e.range.getA1Notation()=='B26')
在做變數宣告之前
const cellAddress = e.range.getA1Notation()
然后使用該變數而不是執行多個 Google Apps 腳本服務呼叫
if(cellAddress=='B23')
if(cellAddress=='B24')
if(cellAddress=='B26')
關于使用陣列、for 回圈等,這可能有助于撰寫更好的腳本,使它們更具可讀性、可維護性、可擴展性等,但您可能會發現僅使用 "基本”服務(即電子表格應用程式)。
在更復雜的腳本上,可能值得使用Advanced Sheets Service以便能夠通過使用batchUpdate.
資源
- https://developers.google.com/apps-script/guides/support/best-practices
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416113.html
標籤:
