GEOWillの答えで展開するには、配列を使って作業しています。 GAS(およびJavaScript)は、あなたに指示することなく、配列を自動的にループすることはありません。 GAS(Javascript)メソッドは、配列全体、または配列内の単一オブジェクト上で動作するように設計されています。両方ではありません。あなたのエラーは、配列上のオブジェクトメソッドの使用を試みたことから来ています。
.getSheets()
という方法を使用する場合は、すべてのシート名の配列を使用します。これはループしながら各要素のメソッドを実行できるオブジェクトの配列です。私は、操作を必要とする各シートをループするためのいくつかの代替方法を含んでいます。
実行されるコードが必要なシートが最初の6であれば最初は次のとおりです。
function phaseFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i = 0; i < 6; i++) {
var sheet = ss.getSheetByName(sheets[i]);
//further variable definition as usual
//we are now working with a singular sheet object (sheets[i])
//code to perform
}
}
これはGEOWillの戦略と似ていますが、これを変更したい場合は、常に最初の6を行います。これは有用である可能性がありますシートが使用され、常に、具体的には第1の6であることが分かる。
以下の構成は、名前に基づいてシートを選択することによってGEOWillがどのように機能するかを操作する。同じシートが使用され、という名前がに変更されない場合に便利です。
function phaseFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ['Phase 1','Phase 2', 'Phase 3', 'Phase 4', 'Phase 5', 'Phase 6'];
for (i = 0; i < sheets.length; i++) {
var sheet = ss.getSheetByName(sheets[i]);
//further variable definition as usual
//code to perform
}
}
次の構成は、順序に関係なくすべてのシートをループし、名前が一致するとコードを実行します。あなたはいつも(がが何よりも条件を満たしていないことを以下枚)9枚を持っています場合
function phaseFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i = 0; i < sheets.length; i++) {
var sheet = ss.getSheetByName(sheets[i]);
if (sheet == "Name 1" || sheet == "Name 2" || ...) {
//further variable definition as usual
//the variables defined will only be defined on the desired sheets
//code to perform
} else {
continue;
//skip over all those that don't meet the condition
}
}
}
あなたはスキップするものをチェックするためにif()
文を変更することができます。これは条件文を短くし、処理したいシートを追加し、常にシートを1枚だけ放置したままにします。
この最後の2つの構成には、標準的な命名規則が含まれます。あなたの質問は、あなたのシートに名前を付ける方法の標準化があることを暗示しています。そして、シートを単独で放置することがこの基準に合致しない場合、あなたは以下に書いたものを使用することができます。名前をチェックして、設定した規約に似ているかどうかを確認し、そうであればコードを実行します。たとえば、 "Phase"で始まる場合はコードを実行し、そうでなければ( "Data"、 "Log"、 "Formulas"など)、コードを実行しないでください。
function phaseFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i = 0; i < sheets.length; i++) {
var sheet = ss.getSheetByName(sheets[i]);
var name = sheet.getName();
if (name.includes("Phase")) { //this returns a boolean
//further variable definition as usual
//the variables defined will only be defined on the desired sheets
//code to perform
} else {
continue;
//skip over all those that don't meet the condition
}
}
}
以下は正規表現を使用しています。
この最初のものは、基本的な文字列メソッド.includes()
を使用しています。
function phaseFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i = 0; i < sheets.length; i++) {
var sheet = ss.getSheetByName(sheets[i]);
var sheetName = sheet.getName();
var nameMatch = sheetName.match(/\b\Phase\b/g);
if (nameMatch[0] != null) {
//further variable definition as usual
//the variables defined will only be defined on the desired sheets
//code to perform
} else {
continue;
//skip over all those that don't meet the condition
}
}
}
この特定の正規表現は、「フェーズ」というフレーズを検索します。大文字と小文字を区別。 .match()
によって返された配列をチェックし、ヌルでない場合はコードを実行します。このマッチングとチェックのプロセスについては、何百もの方法があります。 RegEx(非常に有用)に関する参考文献およびガイドは、hereおよびhereで見つけることができます。テスターはhereです。