簡體   English   中英

Apps 腳本運行減慢將值從一張紙移動到另一張紙的速度

[英]Apps Script running slowing moving values from one sheet to another

我之前發布過一個類似的問題並收到了一個很好的建議,但這個問題略有不同。 我正在將單元格中的數據從一張紙復制到另一張紙,但目的地略有不同。 有沒有更快的方法來做到這一點? 我知道獲取和設置值會減慢速度,但是,我不確定如何將值分配給數組並設置在正確的單元格中。

下面的代碼,建議將不勝感激。

謝謝法茲拉

for (var i = 0; i < simsTimetableLastRow; i++) {
    try {
      
      if(searchRangeVals[i][0].indexOf("Timetable") > -1) {
                
        copyRows = simsTimetable.getRange(i + 1, 1, 2, 11);
        pasteRowsLoc = newTimetable.getRange(j + 1, 1, 2, 11).setValues(copyRows.getValues());
        copyRows.copyFormatToRange(newTimetable, 1, 11, j + 1, j + 3);
        pasteTemplateLoc = newTimetable.getRange(j + 4, 1, 25, 11);
        pasteTemplateLoc.setValues(templateVals);
        template.copyFormatToRange(newTimetable, 1, 11, j + 4, j + 25);

        period1To2 = simsTimetable.getRange(i + 6, 2, 4, 11).getValues();
        newTimetable.getRange(j + 6, 2, 4, 11).setValues(period1To2);
        
        period3 = simsTimetable.getRange(i + 11, 2, 2, 11).getValues();
        newTimetable.getRange(j + 10, 2, 2, 11).setValues(period3);
        
        period3To4 = simsTimetable.getRange(i + 11, 2, 4, 11).getValues();
        newTimetable.getRange(j + 14, 2, 4, 11).setValues(period3To4);
        
        period5 = simsTimetable.getRange(i + 15, 2, 2, 11).getValues();
        newTimetable.getRange(j + 18, 2, 2, 11).setValues(period5);
        newTimetable.getRange(j + 22, 2, 2, 11).setValues(period5);
        
        period6ToReg = simsTimetable.getRange(i + 19, 2, 4, 11).getValues();
        newTimetable.getRange(j + 24, 2, 4, 11).setValues(period6ToReg);
                 
        j = j + 33;
                
      }
    } catch(e) {
      Logger.log(i);
    }
   } 

與處理分配的 memory 中的數據相比,當您的腳本與電子表格交互時,處理時間要長得多。 因此,為了加快速度,您最好將電子表格中所需的所有數據提取到 memory 中的一個 go 中,然后在另一個 Z34D1F91FB2E514B8576FABA6BZ 中寫回您需要的所有數據。

因此,與其逐行獲取值,不如從相關工作表中獲取所有值,例如:

var data = simsTimetable.getRange(2, 1, simsTimetable.getLastRow()-1, simsTimetable.getLastColumn());

並在腳本中使用它。

同樣,不是每次都寫入新工作表,而是啟動一個臨時數組

var tempArray = [];

每當您寫入時,只需將數據逐行推送到此數組中。

請注意,您必須做一些數學運算才能從data數組中獲取正確的數據,並且還必須以一種您可以一步將其寫入新工作表的方式構建您的tempArray ,但這是非常值得的。 出於實際原因,您可能需要重新考慮您的電子表格結構(以便從/復制到的列)彼此相鄰,但您可能已經很幸運了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM