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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google フォーム

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Q&A

解決済

1回答

650閲覧

変数iがいきなりlastRowを取得する

yuko.t

総合スコア9

Google フォーム

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Google Apps Script

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

0グッド

0クリップ

投稿2020/02/20 05:04

編集2020/02/20 06:14

プログラミング初心者です。
GASでグーグルフォームを作成しています。

実際のスプレッドシートの内容は見出し2行+情報5行の計7行なのですが
この書き方で実行すると

var form = FormApp.create(value);//フォームタイトル var id = form.getId(); var subForm=FormApp.openById(id);//タイトル var Item=subForm.addSectionHeaderItem();//説明 for(var i=3;i<=lastRow;i++){ if(sheet.getRange(i,1).getValue()){ var subTitle=sheet.getRange(i,1,1).getValue();//内容 var subDescription=sheet.getRange(i,2,1,10).getValues();//説明 var title=subTitle; var range='' range+='【A】'+'\n'+subDescription[0][0]+'\n'+'\n'; range+='【B】'+'\n'+subDescription[0][1]+'\n'+'\n'; range+='【C】'+'\n'+subDescription[0][2]+'\n'+'\n'; range+='【D】'+'\n'+subDescription[0][3]+'\n'+'\n'; range+='【E】'+'\n'+subDescription[0][4]+'\n'+'\n'; range+='【F】'+'\n'+subDescription[0][5]+'\n'+'\n'; range+='【G】'+'\n'+subDescription[0][6]+'\n'+'\n'; range+='【H】'+'\n'+subDescription[0][7]+'\n'+'\n'; range+='【I】'+'\n'+subDescription[0][8]+'\n'+'\n'; range+='【J】'+'\n'+subDescription[0][9]+'\n'+'\n'; Item.setTitle(title); Item.setHelpText(range); form.addMultipleChoiceItem() .setTitle(title+'に') .setChoiceValues(['選択1','選択2']);//ラジオボタン } }

Item.setTitle(title);
Item.setHelpText(range);

はlastRowで取得した7行目が一発目に取得されます。
そのあとの

form.addMultipleChoiceItem()
.setTitle(title+'に')
.setChoiceValues(['選択1','選択2']);//ラジオボタン

は3行目から順番に取得されます。
どちらも3行目から取得させたいのですが何が原因でしょうか?

試したこと

①form.addMultipleChoiceItem()
.setTitle(title+'に')
.setChoiceValues(['選択1','選択2']);//ラジオボタン

をなくして

Item.setTitle(title);
Item.setHelpText(range);

だけに、とその逆もやりましたが
それぞれの取得の仕方は変わりませんでした。

②for(var i=3;i<=lastRow;i++){
if(sheet.getRange(i,1).getValue()){
var subTitle=sheet.getRange(i,1,1).getValue();//内容
var subDescription=sheet.getRange(i,2,1,10).getValues();//説明

var title=subTitle; var range='' range+='【A】'+'\n'+subDescription[0][0]+'\n'+'\n'; range+='【B】'+'\n'+subDescription[0][1]+'\n'+'\n'; range+='【C】'+'\n'+subDescription[0][2]+'\n'+'\n'; range+='【D】'+'\n'+subDescription[0][3]+'\n'+'\n'; range+='【E】'+'\n'+subDescription[0][4]+'\n'+'\n'; range+='【F】'+'\n'+subDescription[0][5]+'\n'+'\n'; range+='【G】'+'\n'+subDescription[0][6]+'\n'+'\n'; range+='【H】'+'\n'+subDescription[0][7]+'\n'+'\n'; range+='【I】'+'\n'+subDescription[0][8]+'\n'+'\n'; range+='【J】'+'\n'+subDescription[0][9]+'\n'+'\n';

をログ出力するときちんと3行目から取得されていました。

Item.setTitle(title);
Item.setHelpText(range);

を入れるとおかしくなるようです、、、

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

一発目に取得というのは一番上に表示されている、addSectionHeaderItemで作成したヘッダーのことかと思います。
このヘッダーですが、最初に作成(var Item = xxx)し、その後ループ内で値をセットしているようです。(Item.setTitle)
ループの1回目はきちんと3行目のデータが来ているはずですが、ループの2回目には4行目のデータに上書きされ・・・最終的に最終行のデータになります。

どのような仕様であるべきかは分かりませんが、ヘッダはループの外で値をセットするか、ループの度に作らないとおかしくなります。

投稿2020/02/20 08:12

moredeep

総合スコア1507

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

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

yuko.t

2020/02/20 09:00

ありがとうございます。 3行目の内容でヘッダー 3行目の内容でラジオボタン ↓ 4行目の内容でヘッダー 4行目の内容でラジオボタン ・ ・ ・ 7行目の内容でヘッダー 7行目の内容でラジオボタン ↓ 最終行まで来たら終了 という動きにしたいのですが現在は 7行目の内容でヘッダー 3行目の内容でラジオボタン 4行目の内容でラジオボタン 5行目の内容でラジオボタン 6行目の内容でラジオボタン 7行目の内容でラジオボタン 終了 になってしまっています。 データが上書きされているということはヘッダーの部分が 3行目取得→ヘッダーを作成せず4行目取得→ヘッダーを作成せず5行目取得・・・7行目取得→ヘッダー作成 という動きをしているということでしょうか??
moredeep

2020/02/21 00:09

恐らく正確には、ヘッダー作成→ヘッダーに3行目の値をセット→ヘッダーに4行目の値をセット→・・・→ヘッダーに7行目の値をセットとなっているものと思われます。 とりあえず、 var Item=subForm.addSectionHeaderItem();//説明 を Item.setTitle(title); の直前に移動してみると動きは変わると思います。
yuko.t

2020/02/21 01:10

ありがとうございます。 理想通りに動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問