OleDbConnection を使用して、Excel ファイルからシート名のリストを取得しようとしています。(注: このプログラムはサーバー上で実行されるため、Office 相互運用クラスを使用するオプションはありません)。したがって、次のコードですべてが正常に機能し、シート名が返されます。
var dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataRow row in dt.Rows)
{
string sheetName = row["TABLE_NAME"].ToString();
}
ただし、Excel シート名にドット「.」が含まれている場合は、「#」に変換されます。たとえば、Excel ファイルに次のシート名があるとします。
Sheet.1
Sheet#1
上記のコードは次を返します。
"Sheet#1$"
"'Sheet#1$'"
そして、シート名は基本的に同じになりました。悪くなる!!! 次のコードに従って Sheet.1 からデータを読み取る場合:
var adapter = new OleDbDataAdapter("SELECT * FROM ['Sheet.1$']", connectionString);
実際には、「sheet.1」ではなく「sheet#1」からデータを読み取ります。
どんな助けでも大歓迎です。