0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

通常、エクセルで読み込んだデータはコレクションで扱うことが出来ますが、何十万行もの大容量のデータの場合、読み込みに時間がかかったりメモリのエラーが出てしまうことがあります。
コレクションを分割してデータの格納を行うことも出来ますが、OLEDBを用いれば高速で大容量のデータを扱うことが出来ます。
ExcelでもCSVでも読み込み可能で、高速化を図ることが出来ます。

*筆者は34万行のエクセルデータの読み込み→検索をコレクションで約6分かけて行っていたものが約10秒になりました。

※本記事は2022年10月時点の内容を一部変更して作成しました。

OLEDBとは

OLEDBとは、MicrosoftがCOM(Component Object Model)技術をベースとして開発した、様々なタイプのデータへ共通の手段でアクセスできるようにするためのAPIのことです。
Excel・CSV・Access・SQL Server などをSQL構文で横断的に操作できるのが特徴です。

使用方法

例として条件に該当する[貸出対象]列のデータを取得します。

アカウント情報.xlsx
1.png

上のようなファイルを作成します。

2.png

任意のフォルダに配置します。(例:C:\temp\)

1.Blue Prism DXから「Data - OLEDB」をダウンロード

※ダウンロードにはBlue Prism Portalへのログインが必須です

2.Blue Prismにインポートする

インポート.png

2.図のようにアクションを配置します。
3.png

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から検索結果が得られます。
4.png

また、 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を指定しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?