

### 解決したいこと

GASとSlackを連携してSlackの投稿に押されているスタンプの数を計測したい

### 詳細

  * Slackの投稿に押されているスタンプの数を計測してスプレットシートに反映させたい
  * 複数チャンネル(Slack)の情報を取得したい  
１つのスプレットシートにチャンネルごとのタブを作成して反映させたい

### できたこと

  * １つのチャンネルからスタンプ数を計測してスプレットシートに反映させる処理
  * 日時、投稿者（アドレス）、投稿者からメンションをつけられた人（アドレス）、リアクションしたユーザー数（Slackスタンプを押した人）、リアクションしたユーザーの名前（アドレス）の取得＆スプレットシートへ反映させる

### 解決したいこと

同じ条件で複数チャンネルで情報取得し、チャンネルごとのタブに結果を反映させる処理

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

spreadSheetのスクリプトのエラーが以下の通りです（spreadSheetスクリプト全体は以下に記載しております）

[code]

    TypeError: Cannot read properties of undefined (reading 'length')
    outputSpreadSheet   @ spreadSheet.gs:16
    
[/code]

### 該当するソースコード

**GAS（spreadSheet）**

[code]

    /**
     * スプレッドシートにデータを書き出す
     * param dataList 書き出すデータのリスト
     */
    function outputSpreadSheet(dataList) {
      const spredSheetID = PropertiesService.getScriptProperties().getProperty('SS_FILE_ID') 
      const sheetName = PropertiesService.getScriptProperties().getProperty('SS_SHEET_NAME') 
      const ss = SpreadsheetApp.openById(spredSheetID)
    
      // 作業シートを取得
      const sheet = ss.getSheetByName(sheetName);
    
      // 最終行に記載
      const lastRow = findLastRow(sheet, 1);
    
      for(let i = 0; i < dataList.length; i++){
        sheet.getRange(lastRow+1, i + 1).setValue(dataList[i]);
      }
    }
    
    /**
     * 指定列の「最終行の行番号」を返す
     *
     * @param {object} シート
     * @param {number} 列番号
     * @return {number} 最終行の行番号
     */
    function findLastRow(sheet, col) {
      
      //指定の列を二次元配列に格納する※シート全体の最終行までとする
      const ColValues = sheet.getRange(1, col, sheet.getLastRow(), 1).getValues(); 
     
      //二次元配列のなかで、データが存在する要素のlengthを取得する
      const lastRow = ColValues.filter(String).length;
      
      return lastRow;
    }
    
[/code]

**GAS(properties)**

[code]

    /**
     * properties　セット用
     */
    function setProperties() {
      const scriptProperties = PropertiesService.getScriptProperties();
    
      // プロパティ設定用
      scriptProperties.setProperties({
        // アプリ名：Slack履歴取得
        "SLACK_HISTORY_API_TOKEN": "API,
        // アプリ名：SlackユーザID取得API
        "SLACK_USER_API_TOKEN": "API",
        
        // チャンネル名（1）
    //仮でチャンネル名１と定義
        "SLACK_CHANNNEL_ID": "ID",
        // SpreadSheet シート名
        "SS_SHEET_NAME": "1",
        
        // チャンネル名（2）
        "SLACK_CHANNNEL_ID": "ID",
        // SpreadSheet シート名
        "SS_SHEET_NAME": "2",
        
        // チャンネル名（3）
        "SLACK_CHANNNEL_ID": "ID",
        // SpreadSheet シート名
        "SS_SHEET_NAME": "3",
    
        // チャンネル名（4）
        "SLACK_CHANNNEL_ID": "ID",
        // SpreadSheet シート名
        "SS_SHEET_NAME": "4",
    
        // チャンネル名（5）
        "SLACK_CHANNNEL_ID": "ID",
        // SpreadSheet シート名
        "SS_SHEET_NAME": "5",
    
        // SpreadSheet ファイルID
        "SS_FILE_ID": "ID",
      });
    }
    
[/code]

### 自分で試したこと

①リスト上記にも記載しましたが、以下のコードを書く＋チャンネルごとのタブを作成したのですが反映されていない

[code]

    // チャンネル名（5）
    "SLACK_CHANNNEL_ID": "ID",
    // SpreadSheet シート名
    "SS_SHEET_NAME": "5",
    
[/code]

②上記記載のエラーの原因（仮説）

・「dataList」が配列になっていないから？  
・「function outputSpreadSheet(dataList) 」の時点で関数を呼び出した際に「dataList」で何も受け取れていない？  
↓  
console.log(dataList)  
で実行した結果、  
「情報 undefined」  
↓  
・スプレッドシートにデータを書き出す処理をするのにデータを受け取っていない状態？  
→今ここでどうしたらいいか分からず詰まっています><


CC BY-SA 4.0
2023-05-24T05:22:54.903
94959
2023-05-29T02:33:25.913
2023-05-24T06:00:48.263
3060
58430
question
google-apps-script
Slackと連携してSlackの投稿に押されているスタンプの数を計測したい


できていることの

> ・１つのチャンネルからスタンプ数を計測してスプレットシートに反映させる処理  
>
> ・日時、投稿者（アドレス）、投稿者からメンションをつけられた人（アドレス）、リアクションしたユーザー数（Slackスタンプを押した人）、リアクションしたユーザーの名前（アドレス）の取得＆スプレットシートへ反映させる

これらの処理のコードでdataListを作成しているのではないのですか。

teratailの質問の方にもコメントしましたが、  
他のソースコードを伏字にするなどしてdataListの作成過程（データ構成）を  
ご提示いただかないと  
ご希望の動作になるように修正案の提案ができません。


CC BY-SA 4.0
2023-05-29T02:33:25.913
95002
2023-05-29T02:33:25.913
57654
94959
answer