LoginSignup
7
6

More than 3 years have passed since last update.

GASで引数エラー(Ljava.lang.Object;@6cddb344)

Posted at

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
}

これでうまく書き込めた。

7
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6