巨大Excelファイルのボットでの取り扱い方
巨大なExcelファイルを扱う際に最もスピードが速い方法は何なのか?3つの方法から試してみました。
目次
Excelファイルを扱ういくつかの方法
Excelファイルにアクセスしてデータを扱う方法はいくつかあります。主な方法は3つです。特にファイルが大きくなってくるとパフォーマンスに大きな差が出てきます。しかし、それぞれの方法には長所/短所があるので、それを理解したうえで使い分けるのが良いでしょう。
- Excel の高度な操作パッケージを使う:一番直感的な方法です。現在利用可能なExcelパッケージの中で最も多く利用可能なアクションがあります。Excelアプリケーションがインストールされていることが前提で、Excelアプリを介してファイルにアクセスします。実行スピードは、3つの中では最も遅いです。Control Room上のファイルおよびローカルファイルの両方で作動します。
- Excel の基本操作パッケージを使う:Automation AnywhereからExcelを介さずにExcekファイルに直接アクセスをするパッケージです。Excelをインストールする必要はありませんが、使用するアクションが少なくなっています。実行スピードは速いです。Control Room上のファイルおよびローカルファイルの両方で作動します。
- データベースパッケージを使う:3つの方法の中で最速です。ローカルまたはネットワークドライブに保存されているファイルでのみ機能し、Control Room上に保存されたファイルには使用できません。OfficeやExcelをインストールする必要はありません。
テストシナリオ
米国には約42,000の郵便番号がありますが、郵便番号、都市、州の並びになっている一連のデータから、特定の郵便番号 ("95164") のものの都市、州を表示するというシナリオです。
シナリオファイルはGitHub上にあります。(ZipSample.xlsx) Excelファイルの中に42,523行のデータがあり、
3つの方法で構築したボットのコアの部分は以下の通りです。
Excel の高度な操作パッケージ
Excel の基本操作パッケージ
Excel/Officeのインストールは不要。
データベースパッケージ
Access 2010再頒布化のパッケージ (32 bit) のインストールが必要。64 bit OSでも32 bitをインストールする。Excel/Officeのインストールは不要。XLSXファイルでなくXLSファイルの場合はJET DB 4.0エンジンがProviderとなる。
接続文字列 (Access Database Engine 2010 Redistributableのものを使う)
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=”(XLSXファイルへのフルパス)”;Extended Properties=”Excel 12.0 Xml;HDR=YES”
SQL クエリ
Select * from [Sheet1$$] WHERE Zip = 95164
Excelファイルの中身
実行にかかった時間
参考記事