2016-04-03 8 views
0

この機能をスプレッドシート上で実行し、すべてのアポストロフィを検索して置き換えようとしています。今は動作しますが、それは時間がかかりすぎます。私のスプレッドシートには12行あり、それを実行するのに128秒かかりました。私が試してやりたいことは、スプレッドシートの最後の行でのみ有効になります。Googleスプレッドシートの最後の行で検索と置換

var row = r.getLastRow();を追加し、いくつかのスポットを変更して行を使用するようにしてみました。私はそれを実行したときに実行することができませんでした。私はそれが常に最後の行になるようにフォームが提出されるたびに実行させるつもりです。

私はからコードを得た:私は、同じ性能の問題をexpirienced、多くの細胞を処理する際に、GoogleがgetValuegetValuesを促すことがわかっhttps://productforums.google.com/d/msg/docs/7IlOotksJ4I/liXa0SrC-R4J

function fandr() { 
    var r=SpreadsheetApp.getActiveSheet().getDataRange(); 
    var rws=r.getNumRows(); 
    var cls=r.getNumColumns(); 
    var i,j,a,find,repl; 
    find="'"; 
    repl=""; 
    for (i=1;i<=rws;i++) { 
    for (j=1;j<=cls;j++) { 
     a=r.getCell(i, j).getValue(); 
     if (r.getCell(i,j).getFormula()) {continue;} 
     try { 
     a=a.replace(find,repl); 
     r.getCell(i, j).setValue(a); 
     } 
     catch (err) {continue;} 
    } 
    } 
} 

答えて

1

私の意見では、テキストをスクリプトに置き換える最も良い方法はmapです。この機能は、@ serge-insas hereによって提案されました。あなたは最高のパフォーマンス結果を取得し、最後の行の値を置き換えるために、それを修正することができます:

function testReplaceInRange(){ 
    var sheet = SpreadsheetApp.getActiveSheet() 
    var lastRow = sheet.getLastRow(); 
    var DataRange = sheet.getDataRange(); 

    var range = DataRange.offset(lastRow - 1, 0, 1); // last Data row 

    replaceInRange(range,"'",""); 
} 


function replaceInRange(range, to_replace, replace_with) { 
    //get the current data range values as an array 
    var values = range.getValues(); 

    // make RegExp 
    var Rep = new RegExp(to_replace, 'g'); 
    //loop over the rows in the array 
    for(var row in values){ 

    //use Array.map to execute a replace call on each of the cells in the row. 
    var replaced_values = values[row].map(function(original_value){ 
     return original_value.toString().replace(Rep,replace_with); 
    }); 

    //replace the original row values with the replaced values 
    values[row] = replaced_values; 
    } 

    //write the updated values to the range 
    range.setValues(values); 
} 

私は@のコーリー・総hereによって提案され、正規表現でTRICHをも使用しました。これは、最初のものだけでなく、to_replaceのテキストがすべて出現するように作られています。

+0

ありがとうございました!これまでのところ完璧に動作しました。これは他の関数よりも速く実行されます。それは0.5秒で終わります!私はGoogleフォームのデータ検証を最初に試しましたが、それは壊れているようです。 – maxlowry123

関連する問題