はじめに
通常、エクセルで読み込んだデータはコレクションで扱うことが出来ますが、何十万行もの大容量のデータの場合、読み込みに時間がかかったりメモリのエラーが出てしまうことがあります。
コレクションを分割してデータの格納を行うことも出来ますが、OLEDBを用いれば高速で大容量のデータを扱うことが出来ます。
ExcelでもCSVでも読み込み可能で、高速化を図ることが出来ます。
*筆者は34万行のエクセルデータの読み込み→検索をコレクションで約6分かけて行っていたものが約10秒になりました。
※本記事は2022年10月時点の内容を一部変更して作成しました。
OLEDBとは
OLEDBとは、MicrosoftがCOM(Component Object Model)技術をベースとして開発した、様々なタイプのデータへ共通の手段でアクセスできるようにするためのAPIのことです。
Excel・CSV・Access・SQL Server などをSQL構文で横断的に操作できるのが特徴です。
使用方法
例として条件に該当する[貸出対象]列のデータを取得します。
上のようなファイルを作成します。
任意のフォルダに配置します。(例:C:\temp\)
1.Blue Prism DXから「Data - OLEDB」をダウンロード
※ダウンロードにはBlue Prism Portalへのログインが必須です
2.Blue Prismにインポートする
Set Connectionに接続文字列を入力し、Get Collectionに実行したいSQLを入力します。
接続文字列
・Set Connectionの接続文字列:Excelの場合
Provider=Microsoft.ACE.OLEDB.12.0;Data Source="C:\temp\アカウント情報.xlsx";Extended Properties="Excel 12.0 Xml;HDR=YES;"
・Set Connectionの接続文字列:CSVの場合
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\;Extended Properties="Text;HDR=Yes;"
HDR=YES は1行目をヘッダーとして扱う指定です。CSVの場合は Data Source にファイルではなくフォルダを指定し、後述のFROM句でファイル名を指定する点に注意してください。
SQL文の指定
・Excelの場合:FROMにシート名を指定します。
SELECT 貸出対象 FROM[sheet1$] WHERE アカウント名 = 'account' AND サーバー名 = 'server1';
・CSVの場合:FROMにファイル名を指定します。
データアイテム
SQL From:アカウント情報.csv
SELECT 貸出対象 FROM[アカウント情報.csv] WHERE アカウント名 = 'account' AND サーバー名 = 'server1';
シングルクオートで囲むことで文字列として検索することが出来ます。(囲まない場合数字として検索されます)
実行
接続文字列とSQL文を入力して実行すると、Resultsから検索結果が得られます。

また、 Closeを行う前にGet Collectionを繰り返し実行することが出来ます。
下記のようなエラーが出た場合、Microsoft Accessデータベースエンジンをダウンロードしてください。
Microsoft 365 Access Runtime をダウンロードしてインストールする
内部 : コードステージによって例外がスローされたため、コードステージを実行できませんでした。 'Microsoft.ACE.OLEDB.12.0' プロバイダーはローカルのコンピューターに登録されていません。
CSVの注意点
CSVをOLEDBで読み込むと、列の型や文字コードが自動判定されます。
そのため、✓・×・絵文字など、Shift-JIS(ANSI/CP932)にない文字が化けてしまいます。
この場合、schema.iniファイルを作成し、型を指定する必要があります。
schema.ini とは
OLEDB Text Driver(ACE/Jet)が CSV を解釈するときに参照するメタデータ定義ファイルです。同じフォルダに schema.ini を置いておくと、OLEDB は自動判定ではなくこのファイルの指定に従って読み込みます。
配置場所とファイル名
- 読み込む CSV と同じフォルダに配置
- ファイル名:
schema.ini - 1つの
schema.iniに、フォルダ内の複数 CSV の定義をまとめて書くことができる
サンプルテキスト
アカウント情報.csv(UTF-8/BOMなしで保存)
アカウント名,サーバー名,貸出対象
account,server1,✓
tanaka,server2,×
sasaki1,server1,✓
schema.ini(セクション名はCSV名を [ ] で囲む)
[アカウント情報.csv]
Format=CSVDelimited
ColNameHeader=True
CharacterSet=65001
MaxScanRows=0
Col1=アカウント名 Text Width 100
Col2=サーバー名 Text Width 100
Col3=貸出対象 Text Width 10
今回は、「✓」を扱っているため、CSVをUTF-8で保存し、CharacterSet=65001を指定しています。



