2017-06-17 8 views
0

Googleのスプレッドシートにバインドされたスクリプトがあります。このスクリプトは、テンプレートシートのコピーを作成するものです。 'プロジェクト')。Googleスプレッドシートでタブ/シート名が機能しないためのスクリプト

このスクリプトはまったく問題なく動作していました。しかし、後で私はこのスクリプトを使って、新しく作成したシートの名前を抽出してそのセルJ2に入れることを意図したコード行(以下のスクリプトの最後の行)を追加しました。

何とかそのコード行が機能していないのに、残りのコードが正常に機能しています。これに関するいかなる提案も非常に高く評価されます。ありがとうございました!

function onOpen() { 
    var menu = [{ 
     name : "Add", 
     functionName : "newSheet" 
    }]; 
SpreadsheetApp.getActiveSpreadsheet().addMenu("Sheet", menu); 
} 

function newSheet() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var templateSheet = ss.getSheetByName("Template"); 
    var sheet1 = ss.getSheetByName("Projects") 
    var getNames = sheet1.getRange("A:A").getValues().filter(String).toString().split(","); 

for (var i = 0; i < getNames.length; i++) { 
    var copy = ss.getSheetByName(getNames[i]); 
    if (copy) { 
     Logger.log("Sheet already exists"); 
    } else { 
     templateSheet.copyTo(ss).setName(getNames[i]); 
     ss.setActiveSheet(ss.getSheetByName(getNames[i])); 
     ss.moveActiveSheet(ss.getNumSheets()); 

    ss.getSheetByName(getNames[i]).copyTo(ss.getSheetByName(getNames[i]).getRange("J2")); 
    } 
    } 
} 

答えて

1

GASのドキュメントによると、シートクラスのcopyTo()メソッドは、スプレッドシートインスタンスのみをパラメータとして受け入れます。 Rangeをパラメータとして渡しているため、動作しません。また、getSheetByName()はSheetオブジェクトを返します。したがって、実際にはシート名をコピーしていません。

特定の範囲を変更したい場合は、代わりにRangeを使用する方がはるかに便利です。

var sheet = ss.getSheetByName(getNames[i]); 
var cell = sheet.getRange("J2"); 
cell.setValue(getNames[i]); // writing the name of the sheet to cell J2 
+0

ありがとう、アントン! – viv227295

関連する問題