エクセルファイルを読み込む

社内や実験室でも、色々な情報をExcelなどのスプレッドシートで管理しているケースが多くあるかと思います。ここでは、そういったスプレッドシートから情報を取り出してNode-REDの所理に繋げるフローや、スプレッドシートを監視していて内容の更新があった際にそのシートやセルのデータを抽出してNode-REDの処理を行う方法を紹介します。

ノードの追加

スプレッドシートを取り扱うには、node-red-contrib-spreadsheet-in のノードを使用するのが便利です。
Node-REDのフローエディタを開き、メニューから「パレットの管理」を選び、「ノードを追加」のタブからnode-red-contrib-spreadsheet-inを検索して追加してください。左側のパレットのSpreadsheetの項目に4つのノードが読み込まれます。

読み込み対象ファイルの作成

テスト用に、仮データをセットしたExcelファイルを作成しておきます。
項目名1~5の、それぞれに数値データを持ったデータファイルを、「C:\Users\USER\Desktop\spreadsheet\excel_file.xlsx 」 として作成しました。

1.Node-REDの操作で処理を開始する

Node-REDでインジェクトノードやDashboardボタンなどを使用して自動で処理を開始するフローです。
インジェクトノード、またはdashboard ボタンで処理を開始し、file in ノードで対象ファイルを読み込んでバイナリバッファで出力します。
その出力をSpread sheetノードの「Book」でパースします。次の「sheet」でシートを指定し、「sheet to json」で指定範囲をJSON形式のデータに変換します。


file in ノードでExcelファイルを読み込んでバイナリバッファで出力します。

シートに作られた表のデータを取得する

Spreadsheet ノードで順に処理をしていきます。

これでデプロイしてインジェクトノードをクリックすると、Excelファイルの内容が次のように表示されます。
ここでは先頭の行をKey値とした一行ごとのValueがオブジェクトとして配列に格納されていますので、後段でこれを抽出して処理することができるようになります。

指定のセルの値を取得する

また、cellノードを使用してシート内の特定のセルの内容を出力することもできます。フローに合計金額のセルを抽出するcellノードを追加して次のように変更します。

cellノードにはこの例で合計金額を格納するE7セルをセットしています。
上記のフローを実行すると、表のデータが入った配列に続いて、合計金額を集計したセルのデータ、この例では「4500」が取得できています。

2.ファイルが更新されたのを検出して、自動で処理を開始する

上記までの構成のフローでは、対象のExcelファイルを修正した後にNode-REDで処理を開始するアクションが必要でしたが、対象ファイルをwatchノードで監視しておくことで、ファイルが変更された時にNode-REDの処理を自動で起動することができます。

watchノードを配置する

これまでで作成したフローにwatchノードを追加して、監視対象にExcelファイルを指定します。


動作確認

それではファイルの内容を変更してNode-REDの処理を確認します。

1)Excelの表の中から、にんじんの数量を変更してファイルを保存します。
2)watchノードでファイル監視しているので、変更したファイルを保存したことでNode-REDのフローが起動。
3)表のデータと合計金額のデータが取得できました。