web-dev-qa-db-ja.com

Googleスプレッドシートの既存の行に基づいてフォーム要素の値を入力します

ユーザーが入力フォームの値に基づいて既存のシートのエントリを作成、更新、削除できるExcelユーザーフォームをGoogleスプレッドシートに変換しようとしています。値の選択から始めて、テキストボックスに編集可能なバージョンを表示しました。私が渡す値の何が問題なのかを考えてみました。それは常に最後の値を表示するだけで、ループしないようです。

この例では、フォームにID 3の詳細を入力したかったです

Code.gs

function onOpen(){
  var html = HtmlService.createHtmlOutputFromFile('Index').setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi().showModalDialog(html,'Form');  
}

function getTextList(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetText = ss.getSheetByName('Text');
  var sheetTextLastRow = sheetText.getLastRow();
  var sheetTextRange = sheetText.getRange("B2:B" + sheetTextLastRow).getValues();
  return sheetTextRange;
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <select id="selectText" size="5">
    </select>
    <input type="text" id="newText" placeholder="New Text Replacement">
    <select id="textCategory" placeholder="Category">
    </select>
    <select id="textLanguage" placeholder="Language">
    </select>
    <textarea id="textDesc" rows="10" cols="60" placeholder="Description">
    </textarea>
  </body>
  <script>         
         function onSuccess(textValues) {
            var select = document.getElementById("selectText");
            var textOptions = textValues;
            for(var i = 0; i < textOptions.length; i++) {
                var textOpt = textOptions[i];
                var textElement = document.createElement("option");
                textElement.textContent = textOpt;
                textElement.value = textOpt;
                select.appendChild(textElement);
                textElement.onclick = function textClick(textDesc){
                    var selectDesc = document.getElementById("newText");   
                    selectDesc.value = textElement.value;                   
                    };

            }

          }

          google.script.run.withSuccessHandler(onSuccess)
              .getTextList();
</script>
</html>
1
f k

結局、間違った変数を使用していただけです。値は次のように表示されるはずです。

selectDesc.value = textDesc.target.value;
0
f k