【GAS】スプレッドシートに文字列が入力されない

実現したいこと

職員のファイル閲覧状況を把握するサイトを作成しています。
①スプレッドシートには2つのシートがあります。
シート1:A列[ファイル名], B列[URL]
シート2:A列[タイムスタンプ],B列[職員番号],C列[ファイル名]
②サイトに羅列されているファイル名をクリックすると"シート2"にタイムスタンプ,職員番号,ファイル名が自動的に入力されるようにしたいです。

発生している問題・分からないこと

aタグのonclick属性にて、"google.script.run"を用いてスプレッドシートに入力する関数(writeForm)を実行すると、スプレッドシートに値が入力されない(全て)。

該当のソースコード

GAS

1function doGet(e) { 2 3 const officeId = 1234; 4 5 const template = HtmlService.createTemplateFromFile('Table'); 6 template.deployURL = ScriptApp.getService().getUrl(); 7 template.formHTML = getFormHTML(officeId); 8 const htmlOutput = template.evaluate(); 9 return htmlOutput; 10} 11 12function getFormHTML(ID) { 13 14 var number = ID; 15 var sheet = SpreadsheetApp.getActive().getSheetByName("シート1"); 16 var data = sheet.getDataRange().getValues(); 17 18 var result ='<p>ファイル一覧</p>' 19 result += '<table border="5" class="lisence mb-5" id="targetTable">'; 20 21 for(var i=1;i<data.length;i++){ 22 var test = data[i][0].toString(); 23 var link = data[i][1].toString(); 24 var fileName = data[i][0].toString(); 25 result += '<tr style="text-align: center;">'; 26 result += '<td><a href="'+ link +'" onclick="google.script.run.writeForm(' + number +","+ test + ')">' + fileName + '</a></td>'; 27 result += '</tr>'; 28 } 29 result += '</table>'; 30 return result; 31} 32 33//---------------- writeForm関数:入力されたFormに従い、スプレッドシートに書き込む ------------------------ 34 35function writeForm (number,name) {//number,name 36 const today = new Date(); 37 const sheet = SpreadsheetApp.getActive().getSheetByName("シート2"); 38 const formList = [today,number,name]; 39 addRecords('シート2', [formList]); 40} 41 42//---------------- addRecords関数:指定した'スプレッドシート'の最終行に指定した[要素] を書き込む------ 43 44function addRecords(sheetName, records) { 45 const ss = SpreadsheetApp.getActiveSpreadsheet(); 46 const sheet = ss.getSheetByName(sheetName); 47 const lastRow = sheet.getLastRow(); 48 sheet.getRange(lastRow+1, 1, records.length, records[0].length).setValues(records); 49}

html

1<!DOCTYPE html>2<html>3 <head>4 <base target="_top">5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">6 </head>7 <body>8 <form id="tttt" method="POST" action="<?= deployURL ?>">9 <? output._ = formHTML ?>10 </form>11 </body>12</html>

試したこと・調べたこと

上記の詳細・結果

・変数"test"が数値の場合、google.script.runのwriteForm関数は正常に動作しました。
・変数"test"が文字列の場合、google.script.runのwriteForm関数は正常に動作されず、スプレッドシートに何も入力されません(特にエラーコード等はありません)。
・google.script.runの外でwriteForm関数を実行すると、数値・文字列ともに正常に動作しました。

補足

初めての投稿で質問の仕方に不備があればすみません。
様々なサイトを調べましたが、コードを書き始めて日が浅いため解決できませんでした(V8ランタイムのバグ?)。
ファイル名を外に引っ張れたらどうにかなるかと思いましたが未熟で上手くいきませんでした。
ご指南いただければ幸いです。
どうぞよろしくお願いいたします。

コメントを投稿

0 コメント