サーバーでホストされている Excel 2003 ドキュメントを開くために ASP.NET を使用しています。私の管理外のシステムによって作成された Excel スプレッドシートには、5 つの名前付きワークシートがあります。次のように各シートのデータにアクセスします (読みやすくするために改行を追加しています)。
string ExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sample.xls;
Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\";";
OleDbDataAdapter myData =
new OleDbDataAdapter("SELECT * FROM [mysheet]", ExcelConn);
myData.TableMappings.Add("Table", "mysheet");
myData.Fill(ExcelDS);
これは 5 枚中 3 枚で機能します。他の 2 つはこのエラーをスローします。
Microsoft Jet データベース エンジンは、オブジェクト 'mysheet' を見つけることができませんでした。オブジェクトが存在すること、およびその名前とパス名のつづりが正しいことを確認してください。
下部のタブのテキストを調べ、これが Excel で生成する文字列の末尾を調べることで、シート名を 4 重にチェックしました。
=CELL("filename")
c:\[sample.xls]mysheet
接続文字列は 1 回指定され、5 つのシートすべてで再利用されます。
Excel で表示される名前と一致しない文字列でシートを参照する必要がある可能性はありますか? たぶん隠し文字、スペースなど?シートの本当の名前を見つける別の方法はありますか? このデータを取得するための他の提案はありますか?
注: Excel ドキュメントを変更することはできません (自分のやり方でできれば、SSIS を使用して CSV をインポートしたはずです)。
.NET 3.5 / II6 を使用しています。