Excel ADO
最初は何が原因だか全くわからなかったのだけど、Excelのワークシートに対してADOを使ってinsertしたりすると、ファイルが破壊されてしまう(ファイルを開いたときに『ファイルエラー:データが失われた可能性があります』とメッセージがでて、insertしたつもりなのとは違う場所にデータが入ったり、データが消えたりする。)という問題に悩んでいたのでした。
原因だったのはたぶんこれ↓。行の中の一部の列が空白であるようなシート(=テーブル)にinsertすると変な場所にデータが挿入される。Jet4.0、ADO2.1、2.5、2.6で発生し、Jetの最新のサービスパックをあてると解決されるようなことが書いてある。本当かな??Jetは最新にしているつもりだったのだけれど。
それ以外にも、今回役に立った記事をいくつか貼り付けておこう。
- こちらはExcelにADOを使って接続するサンプル。もちろんVB6のプログラムです。ADOは2.5/2.6あたり、Excelは2000を想定しているようです。ADO2.7でも動きそうな気がしますが未確認。Excelについては、XP(2002)、2003とも大丈夫でした。
- これはExcelにデータを転送するいろいろな方法を紹介した記事。『オートメーションを使用して ADO レコードセットをワークシートの範囲に転送する』という項目が参考になった。
'Transfer the data to Excel
oSheet.Range("A1").CopyFromRecordset rs
というような感じでレコードセットをいきなり貼り付けることができるのです。便利。
- Office Space: Using ADO to Query an Excel Spreadsheet | Microsoft Docs
- VBでADOを使ってExcelに接続するときの基本的な手順がまとめられている。ちょっと文章の階層構造がわかりにくいけれど内容豊富。VBのIDEで初回起動時にでる『選択された CollatingSequence は OS でサポートされていません。』というエラーの話とか、Excelのワークシートをデータベースとして利用する上での制限事項とかが書いてある。
『標準の Excel の列にデータを追加する』の項目で
ADOX を使用せずに作成または変更された Excel ワークシートまたは範囲に ADO を使用してデータの挿入または変更を行う場合、挿入するデータの型に制限はありません。
と書いてあるけど、1行だけダミーのデータを手で入力しておいたら、あとからADOで挿入した行もダミーと同じ表示形式になってくれて、数値に'が付かなくなった。これについては上のExcelADOのSAMPLEの中にあるコメントも参照するべし。非表示にされたダミーデータを使ってデータ型を認識させているらしい記述がある。
それから、『ADO』というのと『MDAC』というものの関係がよくわかっていない。バージョンすらよくわからない。バージョンの調べ方が書いてあるサイトとかにリンクをはっておこう。
@IT:Windows TIPS -- Tips:MDACのバージョン調査ツールを利用する
- http://homepage1.nifty.com/MADIA/vb/vb_bbs/200402_04020082.html
- VB界の神、魔界の仮面弁士さんがADOやMDACのバージョンについてちょっと解説されている。