2017-11-13 11 views
0

Googleシートにスクリプトを書いて、指定されたシートの名前を返しました(下記参照)。Googleシート新しいシートの作成時にシート名を返すスクリプトは自動的に更新されません

この機能は要約シートに書き込まれます。ここで入力は、必要なシートのインデックスとして与えられます。私はすべての機能があらかじめ書かれています。

A1 = GetSheet(1)B1 = GetSheet(2)C1 = GetSheet(3)...など明らか

問題のインデックスを持つシートがまだ存在していないとき、私はエラーを取得します。しかし、そのシートを作成すると、セルが新しいシートの名前で自動的に更新されず、エラーが返されます。名前を表示するには、関数を削除してから再度貼り付けなければなりません。

新しいシートが追加されたときに、関数を再入力せずにセルを自動的に更新する方法はありますか?

謝罪私が何か明白でないものを紛失している場合、私はこれに非常に新しいです!

function GetSheet(input) 
{ 
    var spread = SpreadsheetApp.getActiveSpreadsheet(); 
    var sourceSheet = SpreadsheetApp.getActiveSheet(); 
    var sourceIndex = sourceSheet.getIndex(); 
    var nextIndex = sourceIndex + 1; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    SpreadsheetApp.setActiveSheet(ss.getSheets()[input]);   
    var active = ss.getActiveSheet(); 
    var name = active.getName();         
    return name 
} 
+1

あなたの関数の最初の4行は、あなたの戻り値を生成するために何もしないようですue。また、スプレッドシートの 'change'イベント(https://developers.google.com/apps-script/guides/triggers/events#change)を参照して、変更を取得し、更新するスクリプトをトリガーしてください。さらに、すべてのシートの名前を最初に取得してから、 'range.setValues()'を使用して要約シートに貼り付けてください(https://developers.google.com/apps-script/reference/spreadsheet/range# setvaluesvalues) –

+0

@DeanRansevycz最初の4行に気づいてくれてありがとう、私は取り除かなければならない。古いバージョンから。私は 'change'を見ていきます。最初にシート名を見つけることの問題は、それらが作成されるまで、それらが何であるかわからないことです! –

答えて

0

は、それらの入力が

を変更されていないため、機能のこれらの種類の入力は、一般的にセル参照であることが予想されるので、あなたが別のシートを作成するときに、あなたのカスタム関数は何も返していない理由は変化していませんこれらのセル参照の値が変更されると、関数は再計算されます。しかし、あなたの入力は単なる数値です(allSheets()配列のインデックスであり、別のシートを作成しても入力が変更されることはありませんので、実行する機会はありません)

。これらは、onChangeイベントをトリガーする唯一のものだと思いEDIT、INSERT_ROW、INSERT_COLUMN、REMOVE_ROW、REMOVE_COLUMN、INSERT_GRID、REMOVE_GRID、FORMATおよびその他の

確かに、私は他の何を知っていません

+0

ありがとう、それはたくさんの意味があります。私は乱数の変更を[ここ](https://stackoverflow.com/questions/17341399/refresh-data-retrieved-by-a-custom-function-in-google-spreadsheet)から追加しました。それは今や私の機能をリフレッシュしています –

関連する問題