LoginSignup
Luft87
@Luft87

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

LINEからgoogleスプレッドシートに登録する方法

解決したいこと

LINEからのメッセージをgoogleのspreadsheetsに挿入する際に受け取った日時も取得したい。

発生している問題・エラー

2行目から10行目のようにしたいが現状はLINEBOTからメッセージを
送ると11行目のようになる。日付とメッセージのみ。
Image from Gyazo

該当するソースコード

index.js
//対象のスプレッドシートのID(対象のURLを開いてURLの「https://docs.google.com/spreadsheets/d/」以降から「/edit#gid=0」の間の文字列)

var SPREADSHEET_ID = '';
function doPost(e) {
  // ユーザーのメッセージを取得
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  var messageParameter = userMessage;

  //対象のスプレッドシートを取得
  var targetSs = SpreadsheetApp.openById(SPREADSHEET_ID);
  //対象のシート取得
  var targetSht = targetSs.getSheetByName('シート1');
  //最終行取得
  var lastRow = targetSht.getLastRow();
  //現在年月日取得
  var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy/MM/dd");
  var date2 = Utilities.formatDate(new Date(), 'Asia/Tokyo', "HH:mm:ss");
  var date3 = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy/MM/dd HH:mm:ss");
  Logger.log(date);
  Logger.log(date2);

//各セルに書き込み
//A列に記入年月日
  targetSht.getRange('A' + (lastRow + 1)).setValue(date);
//B列
  targetSht.getRange('B' + (lastRow + 1)).setValue(messageParameter);
  targetSht.getRange('C' + (lastRow + 1)).setValue(date);
  targetSht.getRange('D' + (lastRow + 1)).setValue(date2);



  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

自分で試したこと

LINEに関する部分を消して(下記コード)、日付の取得のみで、関数の実行をすると下記の画像のようにうまく日付が入る。

index.js
//対象のスプレッドシートのID(対象のURLを開いてURLの「https://docs.google.com/spreadsheets/d/」以降から「/edit#gid=0」の間の文字列)

var SPREADSHEET_ID = '';
function doPost(e) {
  // ユーザーのメッセージを取得
//  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
//  var messageParameter = userMessage;

  //対象のスプレッドシートを取得
  var targetSs = SpreadsheetApp.openById(SPREADSHEET_ID);
  //対象のシート取得
  var targetSht = targetSs.getSheetByName('シート1');
  //最終行取得
  var lastRow = targetSht.getLastRow();
  //現在年月日取得
  var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy/MM/dd");
  var date2 = Utilities.formatDate(new Date(), 'Asia/Tokyo', "HH:mm:ss");
  var date3 = Utilities.formatDate(new Date(), 'Asia/Tokyo', "yyyy/MM/dd HH:mm:ss");
  Logger.log(date);
  Logger.log(date2);

//各セルに書き込み
//A列に記入年月日
  targetSht.getRange('A' + (lastRow + 1)).setValue(date);
//B列
//  targetSht.getRange('B' + (lastRow + 1)).setValue(messageParameter);
  targetSht.getRange('C' + (lastRow + 1)).setValue(date);
  targetSht.getRange('D' + (lastRow + 1)).setValue(date2);



  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

Image from Gyazo

0

1Answer

単純にtypoでB列に2回値を入れていませんか?

 //B列
   targetSht.getRange('B' + (lastRow + 1)).setValue(messageParameter);
-  targetSht.getRange('B' + (lastRow + 1)).setValue(date);
+  targetSht.getRange('C' + (lastRow + 1)).setValue(date);
   targetSht.getRange('D' + (lastRow + 1)).setValue(date2);
0

Comments

  1. @Luft87

    Questioner
    回答ありがとうごさいます。上記の部分Cに変えましたが機能しませんでした。
  2. なるほど、そうでしたか。
    私の中で考えうる正しく動かない理由は2つで、

    ・C・D列のsetValue実行前に、処理がエラーで落ちて書き込まれていない
    ・あるいはC・D列に書き込まれた後に、何かしらの理由でブランクに上書きされてしまっている

    後者はソースコード見る限りは無さそうな気はしますが。

    前者の確認のためにtry catch入れてみたり、

    try {
    targetSht.getRange('A' + (lastRow + 1)).setValue(date);
    targetSht.getRange('B' + (lastRow + 1)).setValue(messageParameter);
    targetSht.getRange('C' + (lastRow + 1)).setValue(date);
    targetSht.getRange('D' + (lastRow + 1)).setValue(date2);
    } catch (e) {
    // TODO: 変数eをログに吐き出すかレスポンスで返す
    }

    もしくはmessageParameterのsetValueをしている行を、CとDより後ろで実行してみると何か分かるかもしれません。

    また、Rangeを一括で指定しsetValuesで一気に流し込んでみると何か変わるかもしれません。
    getRange, setValueする度にスプレッドシートと通信が走るため、1セルごとsetValueするより処理時間も短く済む効果もあります。

    var targetRow = lastRow+ 1;
    .getRange("A" + targetRow + ":D" + targetRow).setValues([[date, messageParameter, date, date2]]);
  3. @Luft87

    Questioner
    ありがとうございます。無事に代入できました!本当に助かりました!
  4. 原因よく分からないですが、解決したようで何よりです!

Your answer might help someone💌