2017-07-31 93 views
0

我嘗試製作替換值的腳本(例如1到x)。這是我的腳本:如何替換完整Google電子表格中的文本

function myOwnReplaceTest(){ 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var sheet = ss.getName(); 

    for (var r = 1; r <= ss.getLastRow(); ++r) { 
    for (var c = 1; c <= ss.getLastColumn(); ++c) { 
    var sr = ss.getRange(r, c).getValue(); 
    var re = sr.toString().replace(1,'x'); 
    ss.getRange(r, c).setValue(re); 
    } 
    } 
} 

它工作正常,但是非常的大名單很慢(例如1000線和10列)。

當我測試關於「STRG + H」的相同函數時,它在5秒內工作。

有沒有人有我的提示如何讓我的腳本更快?

在此先感謝。

+0

我認爲看到https://developers.google.com/apps-script/guides/support/best-practices它描述「使用批量操作」 –

+0

你好,我很愚蠢的這個例子或一週是漫長。當我問你爲我的例子的一個例子時,這是無恥的嗎?謝謝 –

回答

0

根據我評論的文章,​​以下內容應該更快,因爲它只寫一次。我不得不重寫循環來讓我的索引匹配得很好。

function myOwnReplaceTest(){ 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var sheet = ss.getName(); 
    var newVals = new Array(ss.getLastRow()); 


    for (var r = 0; r < ss.getLastRow(); r++) { 
    newVals[r]=new Array(ss.getLastColumn()-1); 
    for (var c = 0; c < ss.getLastColumn(); c++) { 
    var sr = ss.getRange(r+1, c+1).getValue(); 
    var re = sr.toString().replace(1,'x'); 
     newVals[r][c]=re; 
    //ss.getRange(r, c).setValue(re); 
    } 
    } 
    //Browser.msgBox(newVals); 
    ss.getRange(1,1,newVals.length,newVals[0].length).setValues(newVals); 
} 

想必它還可以通過將數據讀入數組來進一步提高。編輯:這是看起來像什麼。

function myOwnReplaceTest(){ 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var sheet = ss.getName(); 
    var newVals = new Array(ss.getLastRow()); 
    var allSr = ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn()); 
    //Browser.msgBox(allSr.getValues()); 


    for (var r = 0; r < ss.getLastRow(); r++) { 
    newVals[r]=new Array(ss.getLastColumn()-1); 
    for (var c = 0; c < ss.getLastColumn(); c++) { 
    //var sr = ss.getRange(r+1, c+1).getValue(); 
     var sr = allSr.getCell(r+1, c+1).getValue(); 
    var re = sr.toString().replace(1,'x'); 
     newVals[r][c]=re; 
    //ss.getRange(r, c).setValue(re); 
    } 
    } 
    //Browser.msgBox(newVals); 
    ss.getRange(1,1,newVals.length,newVals[0].length).setValues(newVals); 
} 

我希望這會加速一點點。另一個調整可能是多次不調用getLastColumn(),但我想這不是一個很大的因素。這裏的關鍵是內部for循環中的所有操作現在都在內存中。

相關問題