C++ と ADO を使用して MS Excel ファイルから列ヘッダーを読み取るコードがあります。OpenSchema(adSchemaColumns) コマンドが失敗するこの 1 つの Excel ファイルを誰かから入手しました (エラー: 0x800A0CB3: "オブジェクトまたはプロバイダーは、要求された操作を実行できません")。問題を絞り込むために、ファイルからすべてのデータを削除し、列 A を除くすべての列を削除しました。列 A も削除すると、OpenSchema は成功します。そうしないと、失敗します。Excel CELL関数を使用して列Aを他の列と比較しました:フォーマット、保護、内容:しかし違いはありません。
いずれにせよ、OpenSchema(adSchemaTables) は失敗しません。
これは、VS2010 でビルドされた、私が使用する C++ コードの抜粋です。
#import "C:\Program Files\Common Files\System\ADO\msado28.tlb" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")
_ConnectionPtr pCon;
pCon.CreateInstance(__uuidof(Connection))
pCon->Open(connStr, "", "", NULL)
_RecordsetPtr pSchema = NULL;
pSchema = pCon->OpenSchema(adSchemaColumns);
これは、問題のある Excel ファイルへのリンクです: workbook.xls
MS Excel 2010 を使用しています。
再現するには: 変更されていない workbook.xls でコードを実行します - 失敗します。列 A を削除 - 成功。
どんなアイデアでも大歓迎です
ありがとうございました