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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Q&A

解決済

1回答

2298閲覧

連想配列がスプレッドシート に転記できない

KSimo

総合スコア10

Google Apps Script

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

0グッド

2クリップ

投稿2020/04/08 13:44

現在GASで人狼ゲームを行うためのスクリプトを作成していますが、GASの6分の時間制限の対策のために、プレイヤーの氏名と役職の連想配列をスプレッドシートの"secretに転記させようとしたところで詰まっています。

function start_game(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName("secret"); var num = Browser.inputBox("人数を入力してください"); var roles = input_players(num);//人数に応じて役職の配分を決める関数。戻り値は役職の配列 var time = Browser.inputBox("話し合いの時間を入力してください"); var player = getrole(roles,num);//プレイヤーの氏名を入力し、ランダムで役職を与える関数。戻り値は氏名と役職の連想配列 sh.getRange(1,1,num,2).setValues(player); //一旦スプレッドシート上に連想配列を転記したい }

コードを実行したところ以下のエラ〜メッセージが出ました
Exception: パラメータ((class))が SpreadsheetApp.Range.setValues のメソッドのシグネチャと一致しません。(行 9、ファイル「コード」)

スプレッドシートに転記する処理が何かしらおかしいのかと思って色々調べたのですが原因がよくわかりません。
どなたか原因を教えていただけると幸いです。

よろしくお願いします。

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

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

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

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

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

ID_7UGzV8hCHGs5

2020/04/08 14:08

↓これの戻値の形はどんな感じでしょうか。 ``` var player = getrole(roles,num);//プレイヤーの氏名を入力し、ランダムで役職を与える関数。戻り値は氏名と役職の連想配列 ``` console.log(player);としてログに出して頂き、処理実行後に 「表示」→「ログ」と出して、見せて頂けないでしょうか。
KSimo

2020/04/09 00:20

こんな感じですね { hoge: '人狼', hogehoge: '市民', hogehogehoge: '市民', hogehogehogehoge: '市民', hogehogehogehogehoge: '市民' }
papinianus

2020/04/09 12:17

その構造なら私の回答で動きませんか?
KSimo

2020/04/09 13:03

動きました!
guest

回答1

0

ベストアンサー

とりあえず Object.entries でお茶をにごしておく。

javascript

1function start_game(){ 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sh = ss.getSheetByName("secret"); 4 var num = Number(Browser.inputBox("人数を入力してください")); 5 var roles = input_players(num);//人数に応じて役職の配分を決める関数。戻り値は役職の配列 6 var time = Number(Browser.inputBox("話し合いの時間を入力してください")); 7 var player = getrole(roles,num);//プレイヤーの氏名を入力し、ランダムで役職を与える関数。戻り値は氏名と役職の連想配列 8 sh.getRange(1,1,num,2).setValues(Object.entries(player)); //一旦スプレッドシート上に連想配列を転記したい 9}

それはそうと、6 分だかの制限がどうして関係するのかわかりません。一体何にそのように時間がかかるのでしょう。
また、もしユーザの入力に時間がかかるなら、シートに色をつけたり図形を配置したりして、入力欄っぽくして、onEdit で演算させれば時間がかかるために一時凌ぎするというような余分な工程は排除できます。

投稿2020/04/08 15:05

編集2020/04/08 15:13
papinianus

総合スコア12705

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

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

papinianus

2020/04/08 15:12 編集

player の中身だった。
KSimo

2020/04/09 00:16

>それはそうと、6 分だかの制限がどうして関係するのかわかりません。一体何にそのように時間がかかるのでしょう。 >話し合いの時間やプレイヤー側の入力など含めると6分以上かかってしまう可能性があると判断してます
papinianus

2020/04/09 12:20 編集

話し合いというのはダイアログが出てから何人にしようか、考えるということですか? それとも話し合いの時間を何分にするか相談するのに時間がかかるということですか? 相談してからスクリプトを実行すればよいのでは? また、回答にもかいてますが、色を付けたり図形を配置したりして入力欄っぽい体裁にして、入力した瞬間だけ必要なスクリプトが動けばいいと思います。
KSimo

2020/04/09 12:58

話し合いというのは誰が人狼なのか話し合う時間のことです。 そのため、話し合いの時間を6分以上に設定してしまうとGASの制限時間を超えてしまうと考えました
papinianus

2020/04/09 13:21

了解です。書き込めたようですし、次の質問の際はその点を考慮に入れておきます。ご説明いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問