質問編集履歴

2 タイトルを変更(文字列→行),質問内容を追記

supereater712

supereater712 score 19

2019/02/11 18:13  投稿

GASでindexOfにスプレッドシート内の文字列を含む文字列を返したい
GASでindexOfにスプレッドシート内の文字列を含むを返したい
### 前提・実現したいこと
LINE BOTの開発をしています。
受信メッセージの中にスプレッドシート内の文字列が含まれていれば
メッセージを送信できるようにしたいです。  
追記:受信メッセージの文字列がスプレッドシート内の文字と部分一致していれば  
メッセージを送信できるようにしたいです。
### 発生している問題
受信メッセージ(text_str)からスプレッドシート内のA列の文字と一致するものを探して
あれば右のセルにある文字を送信するものになってますが、
text_strとエクセルの文字列が一致しないと送れません。
一致時のみ返信は確認済みです。
###
```GAS
/*
スプレッドシート
[
[おはよう,はい、朝ですね。],
[こんにちは,はい、いい一日ですね。]
]
*/
var API_URL = 'https://api.line.me/v2/bot/message/reply'; // 固定です
var CHANNEL_ACCESS_TOKEN = 'XXXXXX';
function doPost(e) {
 var reply_token= JSON.parse(e.postData.contents).events[0].replyToken;
 if (typeof reply_token === 'undefined') {
   return;
 }
var user_message="";
var text_str = JSON.parse(e.postData.contents).events[0].message.text;//"おはようございます"を代入
var sheet = SpreadsheetApp.openById('YYYYYY').getSheets()[0];
var arrData = sheet.getDataRange().getValues();
var _ = Underscore.load();
var arrTrans = _.zip.apply(_, arrData);
var gyo = arrTrans[0].indexOf(text_str);
if (gyo != -1){
user_message=sheet.getRange(gyo+1,2).getValue();//期待してる返事:はい、朝ですね。
}else{
user_message="失敗です。";
}
UrlFetchApp.fetch(API_URL, {
   'headers': {
     'Content-Type': 'application/json; charset=UTF-8',
     'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
   },
   'method': 'post',
   'payload': JSON.stringify({
     'replyToken': reply_token,
     'messages': {
       'type': 'text',
       'text': user_message
     },
   }),
 });
 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
```
### 試したこと
ここよりGASのUnderscoreを導入済、コードも参考にしています。
https://tonari-it.com/gas-array-underscore-zip-apply/
indexOf(/text_str/)では返ってこないようです。
indexOf(/text_str/)では返ってこないようです。
  • Google Apps Script

    1669 questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

1 user_message変数を正しく定義

supereater712

supereater712 score 19

2019/02/11 16:56  投稿

GASでindexOfにスプレッドシート内の文字列を含む文字列を返したい
### 前提・実現したいこと
LINE BOTの開発をしています。
受信メッセージの中にスプレッドシート内の文字列が含まれていれば
メッセージを送信できるようにしたいです。
### 発生している問題
受信メッセージ(text_str)からスプレッドシート内のA列の文字と一致するものを探して
あれば右のセルにある文字を送信するものになってますが、
text_strとエクセルの文字列が一致しないと送れません。
一致時のみ返信は確認済みです。
###
```GAS
/*
スプレッドシート
[
[おはよう,はい、朝ですね。],
[こんにちは,はい、いい一日ですね。]
]
*/
var API_URL = 'https://api.line.me/v2/bot/message/reply'; // 固定です
var CHANNEL_ACCESS_TOKEN = 'XXXXXX';
function doPost(e) {
 var reply_token= JSON.parse(e.postData.contents).events[0].replyToken;
 if (typeof reply_token === 'undefined') {
   return;
 }
user_message="";
var user_message="";
var text_str = JSON.parse(e.postData.contents).events[0].message.text;//"おはようございます"を代入
var sheet = SpreadsheetApp.openById('YYYYYY').getSheets()[0];
var arrData = sheet.getDataRange().getValues();
var _ = Underscore.load();
var arrTrans = _.zip.apply(_, arrData);
var gyo = arrTrans[0].indexOf(text_str);
if (gyo != -1){
user_message=sheet.getRange(gyo+1,2).getValue();//期待してる返事:はい、朝ですね。
}else{
user_message="失敗です。";
}
UrlFetchApp.fetch(API_URL, {
   'headers': {
     'Content-Type': 'application/json; charset=UTF-8',
     'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
   },
   'method': 'post',
   'payload': JSON.stringify({
     'replyToken': reply_token,
     'messages': {
       'type': 'text',
       'text': user_message
     },
   }),
 });
 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
```
### 試したこと
ここよりGASのUnderscoreを導入済、コードも参考にしています。
https://tonari-it.com/gas-array-underscore-zip-apply/
indexOf(/text_str/)では返ってこないようです。
  • Google Apps Script

    1669 questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る