はじめに
通常、エクセルで読み込んだデータはコレクションで扱うことが出来ますが、何十万行もの大容量のデータの場合、読み込みに時間がかかったりメモリのエラーが出てしまうことがあります。
コレクションを分割してデータの格納を行うことも出来ますが、OLEDBを用いれば高速で大容量のデータを扱うことが出来ます。
ExcelでもCSV形式でも読み込むことが出来、高速化を図ることが出来ます。
*筆者は34万行のエクセルデータの読み込み→検索をコレクションで約6分かけて行っていたものが約10秒になりました。
OLEDBとは
OLE DBとは、MicrosoftがCOM(Component Object Model)技術をベースとして開発した、様々なタイプのデータへ共通の手段でアクセスできるようにするためのAPIのことです。
SQLを用いて検索などの操作を行うことが出来ます。
使用方法
例として条件に該当する[貸出状態]列のデータを取得します。
1."C:\Program Files\Blue Prism Limited\Blue Prism Automate\VBO\BPA Object - Data - OLEDB.xml"よりリリースをインポートします。
2.図のようにアクションを配置します。
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.Jet.OLEDB.4.0;Data Source=C:\temp\;Extended Properties="Text;HDR=Yes;"
HDRは1行目をヘッダーとして扱うかを示します。
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データベースエンジンをダウンロードしてください。
https://www.microsoft.com/ja-jp/download/confirmation.aspx?id=13255
内部 : コードステージによって例外がスローされたため、コードステージを実行できませんでした。 'Microsoft.ACE.OLEDB.12.0' プロバイダーはローカルのコンピューターに登録されていません。
CSVの注意点
CSVファイルを読み込んだ場合、自動で型を判断されます。
型エラーが出てしまう場合、schema.iniファイルを作成し、型を指定する必要があります。
「schema.ini」のサンプル
[アカウント一覧.csv]
ColNameHeader=True
Format=CSVDelimited
Col1=アカウント名 Text
Col2=サーバー名 Text
Col3=貸出対象 Text
日本語が含まれている場合、文字コードをANSIなどにしてください。
サンプルテキスト
アカウント情報.csv
アカウント名,サーバー名,貸出対象
account,server1,✓
tanaka,server2,×
sasaki1,server1,✓