質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2524閲覧

GASのシート数取得について

HarryF

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/03/20 08:28

前提・実現したいこと

Google Apps Scriptにおいて、単語テストのようなものを作りたいと考えているプログラミング初心者です。
スプレッドシートにある単語一覧表を複製し、そこから合格したものを消していくという風にしたいのですが、シートの複製がうまくできません。

発生している問題・エラーメッセージ

TypeError: Cannot read property 'getNumSheets' of null(行 4、ファイル「コード」)
というエラーが表示されます。

該当のソースコード

function Form() {
SpreadsheetApp.openById('本当はここも入力されています');//スプレッドシートを開く
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//有効なスプレッドシートの取得
var n = spreadsheet.getNumSheets();//シート数の取得
var formersheet = spreadsheet.getSheets()[n-1].activate();//最後のシートの取得
var newsheet = formersheet.duplicateActiveSheet().renameActiveSheet(n+1);//新規シートの作成・コピー
var level = spreadsheet.getName();//ファイル名からレベルの取得
var form = FormApp.openById('本当はここも入力されています');//フォームを開く
form.setTitle(level+' 第'+n+'回英単語テスト');//タイトル
form.setDescription('以下の英単語の意味に該当する日本語を続く1~4の選択肢からそれぞれ選びなさい。なお、分からない場合は5の「分からない」にマークをすること。');//説明文
form.setConfirmationMessage('これでテストは終わりです。');//送信後
form.setIsQuiz(true);//テスト形式on
form.setShuffleQuestions(true);//問題シャッフルon
form.addMultipleChoiceItem().setTitle('問題文').setChoiceValues(['選択肢1','選択肢2','選択肢3','選択肢4','選択肢5']);//ラジオボタン式
}

※作成途中です

試したこと

ネット上の複数のサイトと見比べてみたのですが、これといって相違点が見当たらず、どこをどのように直せばよいのかわからないままです。

解決方法などご教示ください。宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これをFormのスクリプトとして書いているのですね?
どこで何をしているかはぜひ共有しましょう。より早く回答が得られます。

javascript

1SpreadsheetApp.openById('本当はここも入力されています');//スプレッドシートを開く 2var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//有効なスプレッドシートの取得

の部分を

javascript

1var spreadsheet = SpreadsheetApp.openById('本当はここも入力されています');

に変えるとそこのエラーは解消します。コードの他の部分は見てません。

投稿2020/03/20 09:01

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2020/03/20 09:02

open*はSpreadsheetを返すだけです。グローバルにActiveなスプレッドシートを設定するような副作用を持ちません。 Formのスクリプトにおいてはアクティブなスプレッドシート、は存在しません。
papinianus

2020/03/20 09:04

違うか、コンテナバウンドではないのか。いずれにしても対処は同じです。スプレッドシートのスクリプトでしかアクティブなスプレッドシートは取れません。
HarryF

2020/03/20 09:06

そうだったのですね・・・ありがとうございます!肝腎な「フォーム」の記載が抜けており申し訳ありませんでした、以後気をつけます!解決しました、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問