複数のExcelの売上ファイル、1つのテーブルに集約 元ファイルの場所までわかる

浦邊信太郎

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はCDataが提供する「CData Software Blog」に掲載された「Excel & CSV ドライバ : ファイル集約時に元のファイルの場所を取得する」を再編集したものです。

 CData Excel DriversCData CSV Drivers はExcel ファイルやCSV ファイルの内容をテーブルとしてアクセスしSQL での操作を可能にします。また、これらのドライバは複数のファイルのデータを一つのテーブルに集約する機能があります。例えば月ごとに分かれた時系列データを集約し、1年分のデータが格納された1つのテーブルとして扱いたいときなどに便利です。

 本記事ではCData Excel Drivers やCData CSV Drivers で複数ファイルのデータを集約する方法と、集約時にソースとなるファイルの場所を取得する方法を紹介します。ここではCData Excel Drivers での設定方法を説明しますがCData CSV Drivers でも同様の方法を利用できます。

 はじめに、以下のように3つのファイルに分かれた売上データ(Sales.xlsx)を1つのテーブルに集約する方法を示します。

 これら3つのファイルは「C:\Work\Excel\Sales」にあると仮定します。デフォルトの設定でこれをCData Excel Drivers でアクセスすると以下のようにそれぞれのファイルに対してスキーマが作成されます。

プロパティ設定

クエリ

-- テーブル一覧を取得する
select SchemaName, TableName, Description from sys_tables;

結果

 ここで、以下のようにAggregateFilesプロパティをTrueに設定すると、各ファイルのデータが1つのテーブルに集約されます。

プロパティ設定

クエリ

-- テーブル一覧を取得する
select SchemaName, TableName, Description from sys_tables;

結果

 集約されたテーブルsales にクエリすると、以下のように売上データを記録した3つのファイルデータが集約されたテーブルにアクセスできます。

クエリ

-- salesテーブルのレコードを取得する
select * from sales;

結果

 集約されたテーブルはソースとなるファイル情報は隠ぺいされます。一方でソースとなるファイルごとにデータを取捨選択したいといったケースがあります。このような要望に対し、ドライバは集約テーブルのレコードごとにソースとなるファイルの場所を表示することができます。

 これを取得するにはIncludeResourceColumnプロパティをTrueに設定します。CData Excel Drivers ではv24.1 でこのプロパティがサポートされました。

 このプロパティを設定したときの動作例を示します。集約テーブルにURI というカラムが追加され、各レコードのソースとなるファイルのパスが取得できます。

プロパティ設定

クエリ

-- salesテーブルのレコードを取得する
select * from sales;

結果

過去記事アーカイブ

2024年
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
2023年
04月
07月
08月
09月
10月
11月
12月