複数の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;

結果

過去記事アーカイブ

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