formObjectのプロパティがundefinedになる
GASを用いてスプレッドシートの指定された名前付き範囲にCSVをインポートするマクロを制作しています
"use strict";
function onOpen() {
SpreadsheetApp.getUi().createMenu("CSV").addItem("CSVをインポートする","importSampleRange").addToUi();
}
function importSampleRange(formObject) {
importCsvByNamedRange("sampleRange", "UTF-8", "sample message");
}
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetObject = spreadSheet.getActiveSheet();
var Main = {};
function showModalForImportingByNamedRange(_message) {
var message = _message || "Import CSV";
var htmlTemplate = HtmlService.createTemplateFromFile("importcsv_template.html");
htmlTemplate.message = message;
htmlTemplate.r = Main.r;
htmlTemplate.c = Main.c;
htmlTemplate.charset = Main.charset;
SpreadsheetApp.getUi().showModalDialog(htmlTemplate.evaluate(),message);
}
function doImport(formObject) {
var charset = formObject.charset.value;
var fileObject = formObject.file;
var stringData = fileObject.getDataAsString(charset);
var csvParsed = Utilities.parseCsv(stringData);
var r = formObject.r.value;
var c = formObject.c.value;
var rl = csvParsed.length;
var cl = csvParsed[0].length;
sheetObject.getRange(r,c,rl,cl).setValues(csvParsed);
}
function importCsvByNamedRange(rangeName, _charset, _message) {
var namedRange = spreadSheet.getRangeByName(rangeName);
Main.charset = _charset || "UTF-8";
Main.r = namedRange.getRow() || 1;
Main.c = namedRange.getColumn() || 1;
showModalForImportingByNamedRange(_message);
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<base target="_top">
</head>
<body>
<form name="uploadform" onsubmit="handleFormSubmit(this)">
<p><?= message ?></p>
<input name="file" type="file" id="file_upload">
<br>
<input name="r" type="hidden" value="<?= r ?>">
<input name="c" type="hidden" value="<?= c ?>">
<input name="charset" type="hidden" value="<?= charset ?>">
<input type="submit">
</form>
<script>
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
function handleFormSubmit(formObject) {
console.log(JSON.stringify(formObject));
google.script.run.doImport(formObject);
}
</script>
</body>
</html>
importCsvByNamedRangeに対して名前付き範囲、文字列符号化方式、メッセージの3つを与えるだけで指定された名前付き範囲にCSVをインポートできるような構成を考えているのですが、formObjectのプロパティがundefinedとなってしまいます.
JSON.stringifyを用いてformObjectの構成を出力したところ以下の様になっていました
{"0":{},"1":{},"2":{},"3":{},"4":{}}
原因など心当たりがありましたらご教示願いたいです。