ADOとExcelシートを利用する際のOS、Officeバージョン留意点
みなさんこんにちわ!
今日は少しマニアックな話。
ADOを使用して、Excelワークシートにクエリを実行するのは、開発者であればよくやる手法かと思います。
エンドユーザーが定義したマスタ情報をExcelワークシートに持たせておいて、プログラムでそのマスタファイルを読み込んで処理する。とかとか。
参考記事)Office Space: ADO を使用して Excel ワークシートにクエリを実行する
その仕組みがOSやOfficeバージョン/ビット数によって、どのような違いがあるのか少し気になったので調べてみました。
スポンサーリンク
環境を整理
ADOを利用するうえで、OLEDBプロバイダがインストールされている(利用出来る状態である)事が大前提です。
参考記事)OLEDBおよびADO
(記事はMicrosoft Office 2000時代のためかなり古いです)
プロバイダについてはOffice2003[xls, mdb]まではJet[Microsoft.Jet.OLEDB.4.0]、Office2007[xlsx, accdb]以降はACE[Microsoft.ACE.OLEDB.12.0]を指定します。
参考記事)【VB6・VBAメモ】ADOの接続先(32bit/64bit)(mdb形式/accdb形式)
接続を試してみる
さて準備が整ったのでいざ接続!と思ったら事前調査で落とし穴。
Office2013からインストール方法が2種類準備されていて、クイック実行形式を選択しているとACE[Microsoft.ACE.OLEDB.12.0]接続ができないんです。
参考記事)クイック実行形式の Office をインストールすると ODBC / OLEDB が利用できない
自分でOffice2013をインストールしたのですが、全く意識していませんでした。
なので、自分の環境がクイック実行形式(C2R)か、Windowsインストーラー形式(MSI)か確認しました。
参考記事)クイック実行形式 (C2R) と Windows インストーラー形式 (MSI) を見分ける方法
私はクイック実行形式でしたね。。。
対応策は、Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント をインストールして、ACE[Microsoft.ACE.OLEDB.12.0]で、xlsxファイルに接続するのね。
ただその前に一回試しとこ。ってことで試してみると、何故か実行できる。
エラーにならないよ~。
これをどう解釈すれば良いのか。。
ドライバーはxlsx入ってません。
私の端末はWindows7からWindows10に更新したのですが、その影響もあるのか。。
これは調査に時間が掛かりそうなので、一旦考えるのを辞めます。
ちなみに64bit版Windowsでの「Microsoft.Jet.OLEDB.4.0」についてでは、64bit版Windowsには「Microsoft.Jet.OLEDB.4.0」が提供されていないと記載がありますが、私の環境もOS64ビット環境のため、Jetでの接続を実施すると正常に接続できちゃいました。
この記載も当てはまらないですね。う~む。
まとめ
客先では、追加のインストーラーを使ってすぐに解決できない場合もあります。
そうなると、抜本的な改修が必要で滝汗ですね。
Officeに振り回されることのないよう、皆様お気を付けください。
それでは!
© Microsoft