ビブロスウェブサイト

ゲームの話題を中心に、好き勝手書いてます。

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

 - プログラミング