2017-11-02 10 views
0
var activeSP = SpreadsheetApp.getActiveSpreadsheet(); 

    var sheets ; 
    var currentSheet; 
    var sheetName ; 

    for(i = 0; (activeSP.getNumSheets()-1) != 0;i++) { 

    sheets = activeSP.getSheets(); 
    currentSheet = sheets[i] ; //Where i think the error is 
    sheetName = currentSheet.getSheetName() ; 

    if(sheetName != dailyName) { 
     activeSP.deleteSheet(currentSheet) ; 
     } 
    else { 
    i++ 
    } 
    } 
} 

私はこのスクリプトを持っています。アイデアは、すべてのシートを削除して、希望の名前(dailyName)のシートを削除することです。しかし、私がしようとすると、currentSheetは、ArrayListの現在の値は、未定義として戻ってきます。もし誰かが私を助けることができたら、私はそれを多く査定します。これは学校のための仕事でもありません。問題の配列からの変数が戻ってきます

Error:TypeError: Cannot call method "getSheetName" of undefined.

答えて

0

パートでは、ループの各段階でgetSheets()を呼んでいるということです。また、配列から項目を削除しているときは、逆順に処理する方が効率的です。そのため、各パスでループはインデックス0に戻りません。

ここで働く機能です:

function sheetToDelete() { 
    var activeSP = SpreadsheetApp.getActiveSpreadsheet(); 
    var dailyName = "img"; // Set this somewhere 

    var sheets ; 
    var currentSheet; 
    var sheetName ; 

    // Get the sheets as an array 
    sheets = activeSP.getSheets(); 

    // run the loop backwards 
    for(var i = (sheets.length - 1); i >= 0; --i) { 

    // get the name of the current index 
    currentSheet = sheets[i].getName(); 

    // Test for a match. If it doesn't delete the sheet 
    if(dailyName !== currentSheet) { 
     // currentSheet is a string right now, so use the index position 
     activeSP.deleteSheet(sheets[i]) 
    }  
    } 
} 

条件が一致しない場合には、次の項目の配列に移動しますので、あなたはまた、ループ内else文は必要ありません。

+0

問題を解決してくれてありがとうございました!私は本当に私の配列リストを確認する必要があります:/ –

関連する問題