ユーザーが入力フォームの値に基づいて既存のシートのエントリを作成、更新、削除できるExcelユーザーフォームをGoogleスプレッドシートに変換しようとしています。値の選択から始めて、テキストボックスに編集可能なバージョンを表示しました。私が渡す値の何が問題なのかを考えてみました。それは常に最後の値を表示するだけで、ループしないようです。
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>
結局、間違った変数を使用していただけです。値は次のように表示されるはずです。
selectDesc.value = textDesc.target.value;