0

ここのチュートリアルに従ってください: https://developers.google.com/apps-script/articles/building-sites-app-part1

サンプルコードをコピーして変更しました。実行しようとすると、次のエラーが表示されます。

TypeError: null のメソッド「getLastRow」を呼び出せません。(327行目)

エラー。

そのページの 326 行目、327 行目は次のとおりです。

326) var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName("TimeBooking"); 327) var lastRow = sheet.getLastRow();

.getSheetByName の文字列を編集して意図的に間違ったものにすると、326 行目にシートが見つからないというエラーが表示されます。よし、そのテストに失敗するはずです。行 326 が正しいことを確認すると、エラーなしでサイレントに実行されますが、行 327 で null エラーが出力されます。

シート オブジェクトが無効な場合、326 行目で警告が表示されないのはなぜですか?

このコードをアプリ エディターで直接実行しても、URL を公開してサイト ページから Google Apps ウィジェットとして実行しても、同じ null エラーが発生することに注意してください。

何か案は?私は基本を学ぼうとしていますが、例の最初の「コピー&ペースト」で困惑しました(笑!)

4

2 に答える 2

1

わかりました、私はそれを理解しました-私の編集は例を壊しました。セマンティクスに迷いました。実際、スプレッドシートの名前を変更することが問題でした。

スプレッドシート全体の名前を、そのスプレッドシートの個々のシートの名前と混同しました。

スプレッドシート ID (スプレッドシートの URL のキー) を使用してスプレッドシートを開くため、スプレッドシート全体の名前は関係ありません。

スプレッドシートの最初の「シート」の名前は関係があり、ソース コード内の ASCII 名と一致する必要があります。

残念ながら、スプレッドシートに TimeBookingExample という名前を付けましたが、スプレッドシートの最初のシートの名前が TimeBooking であることに気付きませんでした。

したがって、getSheetByName() 関数には、スプレッドシート ドキュメント全体の名前ではなく、スプレッドシートの最初のシートの名前が必要です。

326) var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName("TimeBooking");

326 行目で失敗したときにエラーが発生しないのはなぜですか? それは私に私のバグを即座に見つけさせたでしょう..

于 2012-12-11T02:13:31.913 に答える
0

エラーメッセージにあなたに関する何かが書かれている場合は、 (コマンドFまたはコントロールFを使用 して)getColumnWidthを使用するコード行を探し、このステートメントがどのオブジェクトに適用されるかを確認してください。getColumnWidth()

また:シート名を確認しましたか?質問でシート名( "TimeBookingExample")について言及していますが、表示するコードは別のシート名( "TimeBooking")について説明しています...少し混乱しています。

編集: 質問が編集されたため、この回答の最初の部分はもう意味がありません

于 2012-12-08T01:35:39.907 に答える