前提・実現したいこと
GASとHTMLで動的なフォームを出して、登録・編集したいです。
https://blog.teto-sol.com/2021/06/15/post-232/
このサイトを参考に、HTMLの入力欄を増やしました。
発生している問題・エラーメッセージ
何故かうまくいくときとうまくいかない時があります。
上手くいかないときは途中まで出力された後に止まって、スプレッドシートに情報が書き込まれません。
該当のソースコード
function editTrigger(e) {
let sheet = e.source.getActiveSheet();
let cell = e.source.getActiveRange();
let value = sheet.getRange(cell.getRow(), cell.getColumn()).getValue();
checkComment(cell, value);
}
function checkComment(cell, value) {
if (value == true) {
let html = '';
html += '<!DOCTYPE html>';
html += '<html>';
html += '<from>';
html += '<body>';
html += ' <label class="label" for="joukyou">状況</label>' html += ' <input id="joukyou" type="text" name="joukyou" placeholder="現在の案件状況" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 1).getValue() + '><br>'; html += ' <label class="label" for="cop">依頼元</label>' html += ' <input id="cop" type="text" name="cop" placeholder="株式会社○○" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 3).getValue() + '>'; html += ' <label class="label" for="day">希望日</label>' html += ' <input id="day" type="date" name="day" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 6).getDisplayValue() + '><br>'; html += ' <label class="label" for="tantou" >担当者様名</label>' html += ' <input id="tantou" type="text" name="tantou" placeholder="○○様" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 23).getValue() + '><br>'; html += ' <label class="label" for="code">案件コード</label>' html += ' <input id="code" type="text" name="code" placeholder="7桁の案件コード" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 2).getValue() + '><br>'; html += ' <label class="label" for="genba">現場名</label>' html += ' <input id="genba" type="text" name="genba" placeholder="○○様邸" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 4).getValue() + '>'; html += ' <label class="label" for="address">エリア</label>' html += ' <input id="address" type="text" name="address" placeholder="〇〇市" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 5).getValue() + '><br>'; html += ' <label class="label" for="aa">aa担当</label>' html += ' <input id="aa-day" type="date" name="aa-day" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 13).getDisplayValue() + '>'; html += ' <input id="aa-hito" type="text" name="aa-hito" placeholder="aa担当者" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 14).getValue() + '><br>'; html += ' <label class="label" for="bb">bb担当</label>' html += ' <input id="bb-day" type="date" name="bb-day" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 15).getDisplayValue() + '>'; html += ' <input id="bb-hito" type="text" name="bb-hito" placeholder="役所担当者" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 16).getValue() + '><br>'; html += ' <label class="label" for="cc">cc担当</label>' html += ' <input id="cc-day" type="date" name="cc-day" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 17).getDisplayValue() + '>'; html += ' <input id="cc-hito" type="text" name="cc-shito" placeholder="cc担当者" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 18).getValue() + '><br>'; html += ' <label class="label" for="dd">dd担当</label>' html += ' <input id="dd-day" type="date" name="dd-day" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 19).getDisplayValue() + '>'; html += ' <input id="dd-hito" type="text" name="dd-hito" placeholder="dd担当者" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 20).getValue() + '><br>'; html += ' <label >速報予定</label>' html += ' <input id="sokuhou" type="date" name="sokuhou" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 7).getDisplayValue() + '>'; html += ' <label class="label" for="nouhin">納品予定</label>' html += ' <input id="nouhin" type="date" name="nouhin" value=' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 9).getDisplayValue() + '><br>'; html += ' <br><label>担当者情報</label><br>' html += ' <textarea id="tantou-body" name="tantou-body" placeholder="担当者様の所属や役職、連絡先等">' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 25).getValue() + '</textarea>'; html += ' <label>現場情報</label><br>' html += ' <textarea id="genba-body" name="genba-body" placeholder="現場情報">' + SpreadsheetApp.getActiveSheet().getRange(cell.getRow(), cell.getColumn() + 24).getValue() + '</textarea>'; html += ' <style>textarea{' html += ' width:100%;' html += ' height:100px;' html += ' resize:' html += ' vertical;' html += ' }</style>' html += ' <center>'; html += ' <button onclick="okClick()">登録</button>'; html += ' <button onclick="cancelClick()">Cancel</button>'; html += ' </cener>'; html += ' <script>'; html += ' function okClick() {'; html += ' google.script.run.setComment(' + cell.getRow() + ', ' + cell.getColumn() + ', document.getElementById("code").value);'; html += ' google.script.run.setComment1(' + cell.getRow() + ', ' + cell.getColumn() + ', document.getElementById("cop").value);'; html += ' google.script.run.setComment2(' + cell.getRow() + ', ' + cell.getColumn() + ', document.getElementById("genba").value);';
//以下18まで略
html += ' google.script.host.close();';
html += ' }';
html += ' function cancelClick() {';
html += ' google.script.host.close();';
html += ' }';
html += ' </script>';
html += '</body>';
html += '<from>';
html += '</html>';
let commentInputBox = HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModalDialog(commentInputBox, '案件入力フォーム');
}
}
function setComment(row, col, value) {
SpreadsheetApp.getActiveSheet().getRange(row, col + 2).setValue(value);
}
function setComment1(row, col, value) {
SpreadsheetApp.getActiveSheet().getRange(row, col + 3).setValue(value);
}
function setComment2(row, col, value) {
SpreadsheetApp.getActiveSheet().getRange(row, col + 4).setValue(value);
}
以下18まで略
試したこと
配列での書き方がわからなかったため、無理やりひとつづつ記入しました。
何故かたまにsetComment12以降が動かずにスプレッドシートに記入されません。
補足情報(FW/ツールのバージョンなど)
google.script.run.setCommentとfunction setCommentの3以降は文字数制限の為省略していますが、↑のコピペにIDを変更やセルの位置の指定を変更したのみです。
あなたの回答
tips
プレビュー