2014-04-15 62 views
0

我試圖刪除除特別命名的(輸入,模板,摘要)以外的所有工作表。很新的JS,所以我敢肯定它的方式關閉:刪除谷歌腳本中的所有指定工作表

//Delete sheets that are not named 'Input', 'Template', and 'Summary' 
function deleteRedundantSheets() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 

for (i = 0; i <= sheets.length; i++) { 
    switch(sheets[i]) { 
    case sheet.getSheetName() === "INPUT": 
    break; 
    case sheet.getSheetName() === "Template": 
    break; 
    case sheet.getSheetName() === "SUMMARY": 
    break; 
    default: 
    ss.setActiveSheet(sheet[i]); 
    ss.deleteActiveSheet; 
    } 
} 
} 

回答

0
  1. 一旦分配ActiveSpreadSheet給一個變量,您可以使用該引用。在您的代碼中,var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();可以替換爲var sheets = ss.getSheets();,因爲變量ss包含對活動電子表格的引用。

  2. getSheets返回一張紙張數組。所以當你寫var sheet = ss.getSheets()[0];時,你實際上是在變量sheet中分配數組的第一個元素。因此,在您的case聲明中,您始終指向同一張表。因此,而不是使用sheet.getSheetName() === "INPUT",你應該使用sheets[i].getSheetName() === "INPUT"

  3. 要刪除一個表,你也可以使用deleteSheet功能。這是最近在Google腳本中添加的。

下面是修改後的代碼,你可以使用(我沒有測試過這一點,但你應該明白我的意思)。

function deleteRedundantSheets() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets(); 

    for (i = 0; i < sheets.length; i++) { 
    switch(sheets[i].getSheetName()) { 
    case "INPUT": 
    case "Template": 
    case "SUMMARY": 
     break; 
    default: 
     ss.deleteSheet(sheets[i]); 
    } 
    } 
} 
+0

非常感謝。我的代碼出錯了,但我必須做的是將第3行更改爲: – user3511512

+0

var sheets = ss.getSheets()[0]; – user3511512

+0

不要這麼做......這樣你只是指第一個工作表......如果你在for循環之前使用'Browser.msgBox(sheets.length);'你會看到這個值未定義。該錯誤是因爲如果** <= **登錄for循環。將其更改爲** <** – Konstant