Access:システムオブジェクトからcsvのインポート定義を管理する
インポート定義とは
Accessではデータを取り込むときの設定を保存することができます。特にcsvファイル(テキストファイル)の場合、インポート定義を使うとVBAを使わなくても、詳細な取り込み時の型を指定することができるのでなかなか便利です。
※この方法はExcelファイルのインポートには使用できません[1]。Excelファイルのインポートなどに使用する「インポート操作の保存」を参照するには、VBAを使ってImportExportSpecificationオブジェクトを確認する必要がありますが、本記事では言及しません。
システムオブジェクトから、インポート定義を管理しよう
このインポート定義ですが、通常はテキストインポートウィザードを使用して設定できます。今回解説するのは、隠しオブジェクトであるシステムオブジェクトから、インポート定義を変更する方法です。
なぜウィザードから設定しないの?
最初に設定を保存するときは、だいたい自動でやってくれるので便利です。ぜひ使いましょう。でも、あとから設定の変更を行う際はUIが使いづらいです。
なぜ使いづらいかというと…
- 設定ウィンドウが小さい
- 何らかのcsvを用意して、ウィザードを立ち上げる必要がある
- 設定内の定義ボタンから、いちいち呼び出さなければならない
以下のような開発シーンでは、システムオブジェクトによる管理が圧倒的に楽です。
- フィールド数の多いcsvファイルを取り込むとき
- 複数のインポート定義を管理したいとき
おすすめのインポート定義設定手順
というわけで、以下の手順に沿って、インポート定義を管理されることをおすすめします。
- まずは通常通り、テキストインポートウィザードを使用する
- 大まかに設定完了したら、インポート定義の保存を行う
- システムオブジェクトから、インポート定義を変更する
まずは本記事の趣旨である「③システムオブジェクトを使用したインポート定義変更の手順」を、次に①や②で必要な「基本的なテキストインポートウィザードの使い方」について解説します。
システムオブジェクトを使用したインポート定義変更の手順
1)ナビゲーションオプションを開く
Accessの左側に出ているナビゲーションウィンドウで右クリック、ナビゲーションオプションを選択します。
2)システムオブジェクトを表示する
ナビゲーションオプションの下の表示オプションにチェックを入れ、OKボタンを押します。
すると、インポート定義の保存されている、MSysIMEXSpecsテーブルとMSysIMEXColumnsテーブルが表示されます。
3)MSySIMEXSPexとMSysIMEXColumnsをいじる
ここでは肝心なところだけ説明します。詳細は必要に応じて検索してください。
MSySIMEXSPex
- インポート定義の一覧表です。
- インポート定義に関する全般的な設定情報が入っています。
- 1つのインポート定義につき、1レコードが存在します。
SpecName
- インポート定義の名前です。
SpecID
- インポート定義のID番号です。
- フィールド情報を持つMsysIMEXColumnsテーブルで使用しています。むやみに変更するのはやめましょう。
StartRow
- 取り込むデータの1行目をフィールド名にするかのフラグ管理です。
- 0だとレコード、1だとフィールド名として扱います。
MSySIMEXSColumns
- インポート定義を使って取り込むフィールドの一覧表です。
- インポート定義内の、フィールドごとの設定情報が入っています。
- すべてのインポート定義のフィールド数の分だけ、レコードが存在します。
DataType
- インポートを行う際のデータ型です。
- 1がBoolean、4はLong、8はDate、10がStringです。VarTypeとは番号が一致しないので注意。
FieldName
- フィールド名です。
Width
- データの桁数です。
基本的なテキストインポートウィザードの使い方
ここからは前提となる、テキストインポートウィザードの基本操作の説明です。
1)外部データの取り込みウィンドウを開く
外部データのタブから、テキストファイルをクリックしてください。データのインポート元、保存方法を決めてOKボタンを押します。
2)テキストインポートウィザードの設定を行う
おおよそ自動判定されているので、大きな問題がなければ「次へ」ボタンを押します。次の画面の「先頭行をフィールド名として使う」は自分で意識してチェックしてください。
次に、テキストインポートウィザードの左下、設定から大体の設定をしておきます。型などは大まかに自動判定されるので、言語とコードページさえ合っていれば何とかなります。
おおよそ設定が終わったら、保存ボタンを押してインポート定義を保存しましょう。ここでの名前が、MSySIMEXSPexテーブルに保存されるSpecNameとなります。
総括
テキストインポートウィザードは便利なんですが、実際の画面を見てもらうと、このちまちま感が分かると思います。適宜使い分けてみてください。
-
個人的には、ちょっとしたExcelファイルをインポートするなら、VBAでファイルオープン→コピーで十分だと思います。もっと言えば、csvに変換噛ましてから取り込むんで良いんじゃないかなあ。 ↩︎
Discussion