実現したいこと
スプレッドシートで一列すべてのセルに
複数選択可能なプルダウンリストを作成したい
https://teratail.com/questions/iuga34q6week3r
https://qiita.com/Qnoir/items/2ebaa367ed9a75d4ff7b
を参考にしたのですが
スプレッドシートへ書き込むことができていないように見受けられます
前提
html
1<!DOCTYPE html> 2<html> 3 4<head> 5 <base target="_top"> 6</head> 7<style> 8 .box select { 9 width: 100px; 10 } 11</style> 12 13<body> 14 <div class="box"> 15 <select id="items" multiple> 16 <option value="1">1</option> 17 <option value="2">2</option> 18 <option value="3">3</option> 19 <option value="4">4</option> 20 <option value="5">5</option> 21 </select> 22 </div> 23 <div> 24 <button id="inputdata">入カ</button> 25 </div> 26 <script> 27 document.getElementById("inputdata").addEventListener("click", submit); 28 function submit() { 29 const items = document.getElementById('items'); 30 const selectedItems = Array.from(items, (item) => [item.selected, item.value] ).filter(e => e[0]).map(e => e[1]); 31 console.log(selectedItems) 32 google.script.run.inputValues(selectedItems.join(','),<?= row ?>); 33 google.script.host.close(); 34 } 35 </script> 36</body> 37 38</html>
下から六行目の 末尾
<?= row ?>)がおかしいのかと思い数字等に変更をしてみたのですが
スプレッドシートへの反映ができません
該当のソースコード
code.gs
1function showDialog(e){ 2 // ⎾A列以外またはCheckBoxがオフ⏌ならば何もしない。 3 if (e.range.columnStart !== 1 || e.value === 'FALSE') return; 4 // HTMLを組み立て. 5 let html = HtmlService.createTemplateFromFile('index'); 6 html.row = e.range.rowStart; 7 html.col = e.range.columnStart; 8 html = html.evaluate().setWidth(120).setHeight(140); 9 SpreadsheetApp.getUi().showModalDialog(html, '入カ値を選択'); 10} 11 12function inputValues(items, row){ 13 SpreadsheetApp.getActive().getActiveSheet().getRange('C' + row).setValue(items); 14}
index.html
1<!DOCTYPE html> 2<html> 3 4<head> 5 <base target="_top"> 6</head> 7<style> 8 .box select { 9 width: 100px; 10 } 11</style> 12 13<body> 14 <div class="box"> 15 <select id="items" multiple> 16 <option value="1">1</option> 17 <option value="2">2</option> 18 <option value="3">3</option> 19 <option value="4">4</option> 20 <option value="5">5</option> 21 </select> 22 </div> 23 <div> 24 <button id="inputdata">入カ</button> 25 </div> 26 <script> 27 document.getElementById("inputdata").addEventListener("click", submit); 28 function submit() { 29 const items = document.getElementById('items'); 30 const selectedItems = Array.from(items, (item) => [item.selected, item.value] ).filter(e => e[0]).map(e => e[1]); 31 console.log(selectedItems) 32 google.script.run.inputValues(selectedItems.join(','),<?= row ?>); 33 google.script.host.close(); 34 } 35 </script> 36</body> 37 38</html>
試したこと
rowの部分がうまく働いていないのかと思い数字に変更してみたりしました。
お力添えをいただけると幸いです
検証ツールのエラー
提示されたコードで試してみましたが、ダイアログが表示され、選んだ値がC列に書かれました。
現状はどのような動作になっているのでしょうか?
A列のチェックボックスをONにしても値を選択するダイアログが表示されないのでしょうか?
それとも表示されたダイアログで値を選択しても該当行のC列に値が表示されないのでしょうか?
コメントありがとうございます
A列のチェックボックスをONにしても値を選択するダイアログが表示されないのでしょうか?
↑ダイアログは表示され選択することは可能です
それとも表示されたダイアログで値を選択しても該当行のC列に値が表示されないのでしょうか?
↑C列に値が表示されず困っています...
inputValuesに
Logger.log(row);
とログを出力するようにして
エディタの実行数を確認するところでinputValuesのログを確認してみてはどうでしょうか?
もしくは新規にスプレッドシート作って最初からやってみたらどうなるでしょうか?
inputValuesに
Logger.log(row);
とログを出力するようにして
エディタの実行数を確認するところでinputValuesのログを確認してみてはどうでしょうか?
こちら試したところ,特に何かが出てくる等はありませんでした。
もしくは新規にスプレッドシート作って最初からやってみたらどうなるでしょうか?
こちらも試したのですが変化なく...といった具合でして
画像を添付したのですが
検証ツールでみたところエラー等々たくさん出ていて何か関係ありますでしょうか
index.htmlを
<!DOCTYPE html>
<html>
<body>
<script>
google.script.run.inputValues('1,2',1);
google.script.host.close();
</script>
</body>
</html>
としてみて、1行目のC列に値が入りますかね?
index.htmlを
ご指示の通りに
全部書き換えてみて
チェックボックスをつけてみましたが
1行目のC列に値は入りませんでした
V8ランタイムを無効にしたらどうなりますか?
構文エラー: Missing ; before statement. 行: 5 ファイル: コード
とでてしまいます...
V8ランタイム無効にするとletが使えないのでvarに変えてください
確認なのですがエディタの実行数のところの実行結果には
Head inputValues 不明 2023/05/31 18:08:04 0.889 秒
完了
Head showDialog トリガー 2023/05/31 18:08:03 0.584 秒
完了
こんな感じでinputValuesが実行された結果がありますか?
また、表示されたダイアログで「入力」ボタンを押したらダイアログは消えていますか?

あなたの回答
tips
プレビュー