投稿日 | : 2003/12/12(Fri) 13:51 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^5: EXCEL形式のファイルをADOで |
# 以下、ADO + OLE DB Provider for Microsoft Jetの場合について回答していますが、
# DAO や ODBC による接続の場合も、設定項目に関しては同様です。
事前準備:
1. レジストリエディタで、以下の項目を開きます。(Jet 4.0系の場合)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
2. "ImportMixedTypes" が "Majority Type" に設定されていた場合は、
"Text" に修正しておいてください。既定値は"Text" です。
("Majority Type"の場合、データ型は多数決的に決定されます)
3. "TypeGuessRows" を 0 に設定してください。規定値は 8 です。
これは、データ型判定に利用される行数を示します。0は全行走査です。
コード:
拡張プロパティのIMEXフィールドに 1 を指定して、"Import mode"である事を明示します。
Dim Cn As ADODB.Connection
Dim RS As ADODB.Recordset
Set Cn = New ADODB.Connection
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.Properties("Extended Properties").Value = "Excel 8.0; IMEX=1" '☆ここが重要
Cn.Open "C:\Book1.xls"
Set RS = Cn.Execute("[Sheet1$]", , adCmdTable)
なお、レジストリの該当項目を編集すると、他のJETアプリケーションのExcel IISAMの
設定に影響します。通常は、この値を編集しても他のアプリへの悪影響はありませんが、
もし、システム全体に影響させたく無い、という場合は、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0
以下の設定を、別のキー名…たとえば
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\Orator
などにコピーしておき、コピーした側の設定を編集してください。
その上で、その設定を "Jet OLEDB:Registry Path"ダイナミックプロパティに渡せば、
カスタム設定のレジストリ項目が利用される事になります。
(DAOでいうところの、DBEngineオブジェクトのIniPathプロパティに相当する機能です)
Set Cn = New ADODB.Connection
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.Properties("Jet OLEDB:Registry Path").Value = "SOFTWARE\Microsoft\Jet\Orator"