前提・実現したいこと
Googleスプレッドシートをデータベースとして使用しております。
データベースの内容は、店舗名、住所、電話番号などの情報があります。
Google App Scriptを使用してGoogleスプレッドシートの情報を取得し、取得したシートのA列(店舗名一覧:A1に店舗1、A2に店舗2、、、)をサイト上のセレクトボックスを表示させ、選択した店舗名に関する情報(住所や電話番号など)が動的に表示させたいと思っております。
発生している問題・エラーメッセージ
セレクトボックスに店舗名一覧(店舗1、店舗2、、、)が表示される場合と表示されない場合があります。取得するシートの最終列が41以下だとエラーはないのですが、最終列が42以上で実行すると店舗名一覧が表示されなくなります。
該当のソースコード
コード.gs
function loading() { var ss = SpreadsheetApp.openById("シートID"); var listss = ss.getSheetByName("シート名"); var lastrow = listss.getLastRow(); var lastcolumn = listss.getLastColumn(); var list = listss.getRange(2, 1, lastrow-1, 41).getValues(); return list; } function doGet() { var html = HtmlService.createTemplateFromFile('index'); return html.evaluate(); }
index.html
<!DOCTYPE html> <html> <head> <base target="_top"> <meta charset="UTF-8"> <script> function preventFormSubmit() { google.script.run.withSuccessHandler(ListBack).loading(); } window.addEventListener('load', preventFormSubmit); function ListBack(data) { listdata = data; var list = document.getElementById('list'); for (var i=4; i<data.length; i++){ var option = document.createElement('option'); option.setAttribute('value', data[i][0]); option.innerHTML = data[i][0]; list.appendChild(option); } } function addElement(select) { for(var i=0; i<listdata.length; i++){ if(select.value ==listdata[i][0]){ break; } } var element = document.createElement('div'); var obj = document.getElementById("information"); var division = obj.getElementsByTagName('div'); if(division.length > 0){ obj.removeChild(division[0]); } element.class = "information"; element.innerHTML = "店舗名:" + listdata[i][0] + "<br>MAP(Google):<a href=\"" + listdata[i][10] + "\"target=\"_blank\">" + listdata[i][8] +"</a> <br>" + i + "行目"; obj.appendChild(element); } </script> </head> <body> <form> <div id="information"> <select id="list" name="list" onchange="addElement(this);" required><br> <option value=""></option> </select> </div> </form> </body> </html>
試したこと
コード.gs
var list = listss.getRange(2, 1, lastrow-1, 41).getValues();
⇒ エラーなし。※最終列が41以下だと問題なし。
var list = listss.getRange(2, 1, lastrow-1, 42).getValues(); ⇒セレクトボックスにA列(店舗名)が表示されない。※最終列を42よりも大きくするとセレクトボックスが表示されなくなる。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー