GASで引数に伴うエラー
しようとしたこと
Google Formから入力された値をForm入力のタイミングでSpreadsheetに入力しようとした。
主なファイルの構成としては,
- mainFunction.gs
- setManageSheetValue.gs
- getYearMonth.gs
である。
setManageSheetValue.gs
で対象のスプレッドシートにGoogleFormから取得した内容の一部を書きこもうとしていた。
スプレッドシートの名前は2019年7月
のような年と月を示すもので、シートの名前を作る関数がgetYearMonth.gs
に書かれてある。
結果
下記のコードをやってみたが、ちゃんと書き込みができなかった。
GoogleFormから取得する内容の型に対してスムーズにいかなかったようだ。
##最初のコード
getYearMonth.gs
//
function getYearMonth(){
var today = new Date();
var year = today.getFullYear() + '年';
var month = (today.getMonth() + 1) + "月";
var result = year + month;
return result; //YYYY年MM月
}
mainFunction.gs
function mainFunction(e){
...
var mailSender = e.namedValues['メール送信者'];
var timestamp = e.namedValues['タイムスタンプ'];
var dateOfSale = e.namedValues['営業日'];
...
setManageSheetValue(mailSender, timestamp, dateOfSale);
...
}
setManageSheetValue.gs
/*
mailSender, timestamp, dateOfSaleはそれぞれGoogle Formから値を取得したものを引数として与えている。
*/
function setManageSheetValue(mailSender, timestamp, dateOfSale) {
var spreadsheet = SpreadsheetApp.openById('AAA');
var sheetName = getYearMonth();
var sheet = spreadsheet.getSheetByName(sheetName);
var getApoDate = Utilities.formatDate(new Date(timestamp), 'Asia/Tokyo','YYYY/MM/dd');
sheet.appendRow([mailSender, getApoDate, dateOfSale.toString]);
//[Ljava.lang.Object;@6cddb344, 2019/07/03,function toString() { [native code for Array.toString, arity=0] }
}
しかし、引数をそのまま指定すると
[Ljava.lang.Object;@6cddb344
という値がシートの記入されていた。
うーん、toStringで変換した方がいいのかと考えてdateOfSale.toString
のように変更してみたがfunction toString() { [native code for Array.toString, arity=0]
という結果が返ってきた。
解決策
引数をStringとして扱う。
引数に対してString()
を用いて解決した。
setManageSheetValue.gs
function setManageSheetValue(mailSender, timestamp, dateOfSale) {
var spreadsheet = SpreadsheetApp.openById('AAA');
var sheetName = getYearMonth();
var sheet = spreadsheet.getSheetByName(sheetName);
var apointerNAme = String(mailSender);
var apoDate = String(dateOfSale);
var getApoDate = Utilities.formatDate(new Date(timestamp), 'Asia/Tokyo','YYYY/MM/dd');
sheet.appendRow([apointerNAme, getApoDate, apoDate]);
//John,2019/07/03,2019/07/04
}
これでうまく書き込めた。