ExcelProviderとダックタイピングで似て非なるEXCELから共通データを取り出す

5106 ワード

やりたかったこと

表題の通り、似て非なるEXCELが複数ありました。
そこから、共通項を取り出す必要がありました。

似て非なる、とは、

  • 同じヘッダの列が存在するが、列の位置が違う
  • あるファイルには存在するが、あるファイルには存在しないヘッダーがある
  • ヘッダの行も違ったりする

という状態でした。

単純にスクリプトですべてのEXCELをパースして読み取ることもできたのですが、各列の型を把握してパースしたりすると少し面倒なので、F#型プロバイダを使いたくなりました。

型プロバイダの詳細説明は割愛しますが、「ファイル内容から推測して、勝手にclassを生成してくれる機能」という風にとらえてもらえればいいと思います。
型プロバイダがない場合、それぞれのデータフォーマットに応じてクラス定義を行い、データをパースしてオブジェクトにセットする処理を実装する必要がありますが、型プロバイダではそれらがすべてショートカットできます。

ただ、今回の要件では、「似て非なる」ものが複数あるので、型プロバイダを使ってもそれぞれのデータを共通の型として読み込むことができません。似て非なる型が、たくさんできてしまいます。

そこで、F#のダックタイピング機能を使って、必要な値だけ抜き出して用いることとしました。

EXCELの型プロバイダである、ExcelProviderについては以下の記事を参考にさせていただきました。