Googleスプレッドシートにプロジェクト管理ツールを作成しています。誰かが新しいプロジェクトを開始するたびにコピーされ、名前が変更されるプロジェクトのテンプレートがあります。私は次の機能に非常に特有のバグがあります。テンプレート機能でgetRangeが失敗する
まず、以下のフォーマットについてお詫び申し上げます。どのように試しても、私は途中で1行をコードフォーマットに入れることができなかったので、コードは中央の1つの変なラインで半分に分割されます。私はあなたに保証します、これはGoogle Appsで動作するすべての機能です。
エラーは、ブレーク直前の行で発生しています。 "empArchive、getRange(archiveCurrRow、1、1、6).setValues(masterListTop.getRange(i、1,1,6).getValues())/ /アーカイブプロジェクト "。これを初めて新しいファイルで実行すると、この行で停止し、 "getRange"が定義されていないというエラーが表示されます。 getRangeが実際にmasterListTopとempArchiveの両方に対して定義されていることを確認する直前の行にいくつかの呼び出しを追加し、これらの呼び出しはうまく動作します。
次の行がほぼ同じで、スクリプトが正常に実行されたため、問題の行をコメントアウトしてみました。私はその行のコメントを外し、スクリプトは再びうまくいった。しかし、このテンプレートから新しいファイルを作成するたびに、このエラーが発生します。私がコメントアウトし、問題の行のコメントを外すと、それは実行されます。明らかに、それは実用的な回避策ではありません。なぜ誰が何が起こっているのか分かりませんか?
ご協力いただきありがとうございます。
function onEdit(){
var projectSheet = SpreadsheetApp.getActive().getSheets()[0];
if((projectSheet.getRange(6,2).getValue()=="Completed")&&(projectSheet.getRange(9,9).getValue()!= "Completed")){ //find if project has been marked Completed
var empList = SpreadsheetApp.openById("XXXXXXXXXXX").getSheets()[0]; //open list of employees
var masterList = SpreadsheetApp.openById("XXXXXXXXXXX") //open the master list
var masterListTop = masterList.getSheets()[0]
var i = 2;
while(masterListTop.getRange(i,1).getValue() != projectSheet.getRange(1,2).getValue() && masterListTop.getRange(i,1).getValue() != "ZZZ"){ //find this project on the master list
var currValue = masterListTop.getRange(i,1).getValue()
i++
}
if(masterListTop.getRange(i,1).getValue() != "ZZZ" && masterListTop.getRange(i,11).getValue() == "No"){ //if the project has not been archived, do the following
var j = 2
while(empList.getRange(j,3).getValue() != projectSheet.getRange(2,2).getValue()){ //find the project owner on the employee list
j++
}
var empSheet = SpreadsheetApp.openByUrl(empList.getRange(j,5).getValue()) //open that employee's page
var empArchive = empSheet.getSheets()[2];
var empName = empArchive.getRange(1,1,1,1).getValue()
var archiveCurrRow = empArchive.getLastRow()+1
var projectName = masterListTop.getRange(i,1,1,1).getValue()
empArchive,getRange(archiveCurrRow, 1, 1, 6).setValues(masterListTop.getRange(i,1,1,6).getValues()) //archive the project
//above is the problem line
empArchive.getRange(archiveCurrRow,7,1,1).setValue(masterListTop.getRange(i,10,1,1).getValue())
masterListTop.getRange(i,11).setValue("Yes") //mark the project Archived
}
var m = 11
while(projectSheet.getRange(m,1).getValue() != ""){
if(projectSheet.getRange(m,9).getValue() == "No"){ //find unarchived tasks in this project
var n = 2
while(empList.getRange(n,3).getValue() != projectSheet.getRange(m,2).getValue()){ //find the task owner on the employee list
n++
}
empSheet = SpreadsheetApp.openByUrl(empList.getRange(n,5).getValue()) //open the task owner's page
var empTaskArchive = empSheet.getSheets()[3]
empTaskArchive.getRange(empTaskArchive.getLastRow()+1, 1, 1, 1).setValue(projectSheet.getRange(m,1).getValue()) //archive the task
empTaskArchive.getRange(empTaskArchive.getLastRow(), 2, 1, 4).setValues(projectSheet.getRange(m, 3, 1, 4).getValues())
empTaskArchive.getRange(empTaskArchive.getLastRow(), 6, 1, 1).setValue(masterListTop.getRange(i, 1).getValue())
empTaskArchive.getRange(empTaskArchive.getLastRow(), 7, 1, 1).setValue(projectSheet.getRange(7, 2).getValue())
empTaskArchive.getRange(empTaskArchive.getLastRow(), 8, 1, 1).setValue(masterListTop.getRange(i,10).getValue())
projectSheet.getRange(m,9).setValue("Yes") //mark the task Archived
}
m++
}
projectSheet.getRange(9,9).setValue("Completed")
}
}
[タグ:google-spreadsheet-api]は、Google Apps ScriptのSpreadsheetAppサービスと同じではありません。 markdownを使用してコードの書式設定で表示されなかった行を「修正」するにはインデントが削除されました。あなたが試みることができる他のものは '
'を使うことです。私は、このフォーマットの問題は[meta]で報告されるべきだと思います。 –
主な問題については、最小限のコード行を使用して問題を再現してみてください。詳細は、[mcve]を参照してください。 –
これがエラーの原因かコピーエラーであるかどうかは不明です。しかし、ここには 'empArchive、getRange(archiveCurrRow、1、1、6)'のカンマがあります。 'empArchive.getRange(archiveCurrRow、1,1,6)'のようにempArchiveの後に ' –