CData Arc Excel コネクタ(Excel からのデータ読み取り)

by 色川穂高 | 2022年08月22日

こんにちは。CData Software Japanの色川です。
 
日頃、データ連携・連携の自動化について多くのご相談を頂きますが、その中でも良く出てくるデータソースの1つがExcel です。皆さん大好きですよね、Excel。良くも悪くも使いだす障壁の低いExcel を入力インタフェースにしてる業務や、Excel を帳票として使っている業務なども多いのではないでしょうか。
 
「ローカルにあるExcel ファイルのデータを取得して、SaaS やアプリケーションに連携したい」は、とても多く頂く相談です。
 
以前、こちらの記事で、CData Arc からExcel ファイルに書き込む機能を紹介しました。
 
この記事では、CData Arc のExcel コネクタでExcel ファイルを読み取る方法をご紹介します。
 

CData Arc

 
CData Arc は、CData 製品の中で「自動化/Automate」を担うデータ連携ツールです。「B2B 連携をもっとシンプルに」をコンセプトに、ファイル連携 & DB 連携 & API 連携といったB2B 連携に必要なすべてをノーコード・ローコードでつなぐことができるプラットフォームです。
 
 

この記事のシナリオ

 
この記事では、ローカルのExcel ファイルからデータを読み取り、Google Sheets へ連携する方法をご紹介します。
 
このシナリオは、CData Arc のサンプルフローページ でもご紹介していますが、Excel からの読み取り部分を少し詳しくご紹介します。
 

事前準備

 
この記事のシナリオでは、こちらの製品を利用します。30 日間のトライアルライセンスが提供されていますので、ぜひお手元で試してみてください。
 
 

製品のインストールとナレッジ

 
CData Arc のインストールはこちらを参考にしてください。
 
CData Arc を使い始めるときは、こちらも参考にしてください。
 
CData Arc に関するナレッジは、こちらにまとめています。あわせて参考にしてください。
 

Excel ファイル

 
この記事では、以下のようなExcel ファイルを用意しました。1つ目はA1セルからはじまるシンプルなテーブルスタイルのデータ構造です。
 

 
2つ目はデータの内容としては1つ目と同一なのですが、シンプルなテーブルではない(やや帳票的な)スタイルで用意しました。

 

Google Sheets

 
この記事では、Excel から読み取ったデータを、そのままシンプルに同期します。
 

 

連携フローの作成

 
それでは実際に連携フローを作成していきます。
 
このシナリオで作成する連携フローは以下のような流れになっています。
 
    コネクタ    内容
1   File        指定フォルダからExcel ファイルを取得(受信)
2   Excel       Excel ファイルからデータを読み取り
3   XMLMap      2 と 4 をマッピング
4   CData       Google Sheets Driver でGoogle Sheets へUpsert(更新)
 
 

File コネクタ

 
最初にフローの起点となるFile コネクタを配置して、Excel ファイルをArc のフローに取得する設定をします。コアカテゴリから「File(ファイル)」コネクタを選択して、フローキャンバスへ配置します。
 
Excel ファイルを配置してあるフォルダを「パス」に指定します。この記事では、C:\Temp\excel 配下にExcel ファイルを配置しています。必要に応じて、受信のファイルマスクなどを設定してください。
 
これで、File コネクタの設定は完了です。
 
アウトプットタブから「受信」を実行し、Excel ファイルを受信(取得)できることを確認します。
 

Excel コネクタ

 
次にこの記事の本題であるExcel コネクタを配置して、取得したExcel ファイルから読み取る設定をします。コアカテゴリから「Excel」コネクタを選択して、フローキャンバスへ配置します。
 
CData Arc のExcel コネクタによる読み取りには2 つの変換モードがあります。シンプルなテーブルスタイルのExcel ファイルの読み取りに利用できる「テーブルモード」と、複雑なスタイルのExcel ファイルもキメ細かく読み取りロジックを指定することができる「テンプレートモード」です。
 

Excel 読み取り(テーブルモード)

 
まずは事前準備したExcel ファイルの内、シンプルなテーブルスタイルのExcel を読み取る時の設定です。
 
こちらのExcel はカラムヘッダーが存在するシンプルなテーブルスタイルなので「Translation Mode」を「テーブル」にして、「カラムヘッダーが存在します」をON にします。
 
テーブルモードの場合、必要な設定はこれだけです。とてもシンプルですね。
 
期待通りに動作するかを確認してみましょう。Excel コネクタのインプットタブから「ファイルをアップロード」したら、アウトプットタブを確認します。期待通りに下記のようなスキーマで読み取れていることが確認できます。
 
 
 
 
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Sheet1>
        <OrderNo>1000</OrderNo>
        <Seq>1</Seq>
        <Product>foo</Product>
        <Amount>10</Amount>
        <Price>1000</Price>
    </Sheet1>
    <Sheet1>
        <OrderNo>1000</OrderNo>
        <Seq>2</Seq>
        <Product>bar</Product>
        <Amount>10</Amount>
        <Price>2000</Price>
    </Sheet1>
    <Sheet1>
        <OrderNo>1000</OrderNo>
        <Seq>3</Seq>
        <Product>baz</Product>
        <Amount>20</Amount>
        <Price>5000</Price>
    </Sheet1>
</Items>

Excel 読み取り(テンプレートモード)

 
次に事前準備したExcel ファイルの内、シンプルなテーブルではない(やや帳票的な)スタイルで用意したExcel を読み取る時の設定です。
 
読み取った後のデータ構造(スキーマ)としてはテーブルモードと同じ結果を得たいのですが、こちらのExcel ではOrderNo が帳票のヘッダ的に配置されているイメージです。この場合はテーブルモードでは読み取れないので、テンプレートモードを利用します。
 
テンプレートモードではExcel コネクタは事前に指定されたテンプレートファイルを使用して変換を実行します。Excel から XML に変換する場合、テンプレートファイルはXML ファイルで用意します。テンプレートファイルは、CData Arc のArcScript を使用して、出力ファイルに入力ファイルのデータを動的に取り込むように記述します。
 
Excel からXML へ変換するためのテンプレートの記述については、こちらのヘルプトピック を参考にしてください。
 
ここではExcel コネクタに用意されているサンプルテンプレートをベースに、ヘルプトピックのガイドに従って、以下のようなテンプレートファイルを用意しました。
 
<!-- NOTE: Do not edit arc:info -->
<arc:info title="Translate Script" desc="Translate file.">
  <input name="PortId"        desc="The id of the port that is translating file." />
  <input name="MessageId"     desc="The id of the translation." />
  <input name="FilePath"      desc="The path of the data file." />
</arc:info>

<!-- Read Excel -->
<arc:set attr="xml.file" value="[FilePath]" />
<arc:set attr="xml.sheet" value="Sheet1" />
<arc:set attr="xml.version" value="2007" />

<arc:setm item="xml">
  map:OrderNo = "D2"
  map:Seq = "A5:A*"
  map:Product = "B5:B*"
  map:Amount = "C5:C*"
  map:Price = "D5:D*"
</arc:setm>

<arc:call op="excelGet" in="xml" out="out1">
  <arc:map from="out1" to="data" map="*=*" />
</arc:call>

<?xml version="1.0" encoding="UTF-8"?>
<Items>
  <arc:enum attr="data.title">
    <arc:set attr="tmp.tmp" value="[data.Seq#[_index] | def('')]" />
    <arc:equals attr="tmp.tmp" value="">
      <arc:break/>
    </arc:equals>
    <Sheet1>
      <OrderNo>[data.OrderNo]</OrderNo>
      <Seq>[data.Seq#[_index] | def]</Seq>
      <Product>[data.Product#[_index] | def]</Product>
      <Amount>[data.Amount#[_index] | def]</Amount>
      <Price>[data.Price#[_index] | def]</Price>
    </Sheet1>
  </arc:enum>
</Items>
 
用意したテンプレートファイルをExcel コネクタにアップロードします。
 
 
 
これでテンプレートモードでのExcel 読み取りの設定ができました。
 
期待通りに動作するかを確認してみましょう。Excel コネクタのインプットタブから「ファイルをアップロード」したら、アウトプットタブを確認します。期待通りに下記のようなスキーマで読み取れていることが確認できます。
 
 
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Sheet1>
        <OrderNo>1000</OrderNo>
        <Seq>1</Seq>
        <Product>foo</Product>
        <Amount>10</Amount>
        <Price>1000</Price>
    </Sheet1>
    <Sheet1>
        <OrderNo>1000</OrderNo>
        <Seq>2</Seq>
        <Product>bar</Product>
        <Amount>10</Amount>
        <Price>2000</Price>
    </Sheet1>
    <Sheet1>
        <OrderNo>1000</OrderNo>
        <Seq>3</Seq>
        <Product>baz</Product>
        <Amount>20</Amount>
        <Price>5000</Price>
    </Sheet1>
</Items>
 
File コネクタから、Excel コネクタにフローをつなぎます。これで、指定したフォルダから取得したExcel ファイルはフローで処理するメッセージとして次のコネクタに連携され、Excel コネクタで読み取り(XML へと変換)されます。
 

CData コネクタ

 
次にフローの終点となるCData コネクタを配置して、Google Sheets の更新(Upsert)設定をします。コアカテゴリから「CData」コネクタを選択して、フローキャンバスへ配置します。
 
Google Sheets へ接続します。この記事ではOAuth 認証を経て、接続します。
 
  
 
アクションに「Upsert」を指定して、テーブルの「追加」から更新するGoogle Sheets のシートを指定します。
 
 
 
これで、CData コネクタの設定は完了です。
 

XMLMap コネクタ

 
最後にExcel コネクタで読み取った(XML に変換した)データを、CData コネクタで構成したGoogle Sheets のシート構成にマッピングする設定をします。コアカテゴリから「XMLMap」コネクタを選択して、フローキャンバスへ配置します。
 
 
Excel コネクタから、XMLMap コネクタへ。XMLMap コネクタからCData コネクタへフローをつなぎます。
 
フローをつないだことで、スキーマ構造が確定しているCData コネクタについては、XMLMap のデスティネーションファイルにスキーマが自動的に認識されます。ソースとなるExcel コネクタについては設定時点ではスキーマ構造が分かりませんので、読み取った(XML 変換した)データ構造のスキーマファイルを用意して、アップロードすることで指定します。
 
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Sheet1>
        <OrderNo />
        <Seq />
        <Product />
        <Amount />
        <Price />
    </Sheet1>
</Items>
 
 
 
マッピングは、同名の項目を持つ場合、自動的にマッピングが設定されます。今回は全ての項目を同名にしてありますので、マッピング設定はこれで完了です。
 
これで、XMLMap コネクタの設定は完了です。
 
これで「ローカルのExcel ファイルからデータを読み取り、Google Sheets へ連携する」フローが出来上がりました。

 

連携フローの実行

 

作成したフローを実行して確認してみましょう。
 
起点となるFile コネクタからフローを実行してみます。アウトプットタブから「受信」を実行します。
 
フローの終点となるCData コネクタのインプットタブではGoogle Sheets へのUpsert が成功していることが確認できます。
 
Google Sheets へ期待した通りに連携できていることが確認できました。

 

連携フローの自動実行

 
CData Arc ではフローを定期実行するスケジューラ機能を持っています。今回のシナリオであれば、フローの起点となるFile コネクタの「オートメーション」タブで設定することができます。1時間に1度、毎時0分に定期実行する場合は、このように設定します。

 

この記事で紹介したフロー(テンプレート)

 

この記事で作成したフローについては、こちら からテンプレートとして使える arcflow がダウンロードできます。
 
ダウンロードしたarcflow は「ワークスペースをインポート」やフローデザイナーにドラッグ&ドロップで登録できます。こちらのテンプレートを利用する時は、各コネクタでの接続情報などを、お使いの環境に併せて編集してください。

 

おわりに

 

大変使い勝手が良いExcel は、とても多くの業務で利用されていますよね。それらExcel 形式で存在するデータの活用を自動化・効率化するには、Excel ファイルをシンプルに、時にはキメ細かく読み取れる機能が必要です。
 
CData Arc はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで250を超えるアプリケーションへの連携を実現できます。必要な連携を低価格からはじめられる事も大きな特長です。

 

皆さんのつなぎたいシナリオでぜひ CData Arc を試してみてください。

arc.cdata.com

お試しいただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。

www.cdata.com


この記事では CData Arc™ 2022 - 22.0.8252.0 を利用しています。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。