Book1.xls
というワークシートを含むSheet1
というスプレッドシートファイルを読み込もうとしています
ただし、次のエラーが発生します。
Microsoft Jetデータベースエンジンはオブジェクト 'Sheet1 $'を見つけることができませんでした。オブジェクトが存在し、その名前とパス名のスペルが正しいことを確認してください。
ここに私が使用しているコードのスニペットがあります:
Dim dt As DataTable = New DataTable()
Select Case fileExt
Case ".csv"
Dim reader As New CsvReader
dt = reader.GetDataTable(filePath)
Case ".xls", ".xlsx"
Dim oleDbConnStr As String
Select Case fileExt
Case ".xls"
oleDbConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"""
Case ".xlsx"
oleDbConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=2"""
End Select
Using oleDbConn As OleDbConnection = New OleDbConnection(oleDbConnStr)
oleDbConn.Open()
Dim oleDbCmd As New OleDbCommand("SELECT * FROM [Sheet1$]", oleDbConn)
Dim oleDbDa As New OleDbDataAdapter(oleDbCmd)
oleDbDa.Fill(dt)
oleDbConn.Close()
End Using
End Select
コードがワークシートを見つけられない理由を理解できません。これはなぜですか、どうすれば解決できますか?
問題を見つけました。
スプレッドシートが間違った場所に保存されていたため、filepath
が存在するファイルを指していませんでした。
別のエラーメッセージが表示されることを想定していたので、最初はこれを確認しませんでした。 「Book1.xlsが見つかりませんでした」のようなもの。ただし、存在しない場合は、ワークシートが見つからないというメッセージが表示されます。
ファイル名に以下のような追加のドット文字がある場合:
sample.data.csv
次の選択ステートメント:
SELECT * FROM [sample.data.csv]
接続文字列を使用:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Data\"; Extended Properties="text;HDR=Yes;Format=Delimited;";
例外で失敗します:
Additional information: The Microsoft Jet database engine could not find the object 'sample.data.csv'. Make sure the object exists and that you spell its name and the path name correctly.
また、Excelでファイルを開いていないことを確認してください。他の場所で開いていると、ファイルを読み取ることができません。同じエラーが発生し、ファイルをExcelで開いていることに気付きました。
このリンクからコーディングされたvbによる最善の解決策、これらの人々へのすべての功績 http://www.vbforums.com/showthread.php?507099-data-from-Excel-sheet-to-datagrid-(vb)
C#以下の予想される解決策
string connString = "Driver={Microsoft Excel Driver (*.xls)};READONLY=FALSE;DriverId=790;Dbq=" + "C:\\Users\\BHARAVI\\Documents\\visual studio 2013\\Projects\\ERP\\ERPAutomation\\Assets\\Data\\Data.xls";
OdbcConnection conn = new OdbcConnection(connString);
conn.ConnectionTimeout = 500;
OdbcCommand CMD = new OdbcCommand("SELECT * FROM [Sheet1$]", conn);
OdbcDataAdapter myDataAdaptor = new OdbcDataAdapter(CMD);
DataSet ds = new DataSet();
myDataAdaptor.Fill(ds ,"Sheet1");
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)
{
loginId = dr["LoginId"].ToString();
encryptedPassword = dr["PWD"].ToString();
URL = dr["URL"].ToString();
}
よくわかりませんが、よく機能する同様のコード(C#)があります...
多分あなたは違いを見つけることができますか?
string connectionString = string.Format(Thread.CurrentThread.CurrentCulture, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;'", excelFilePath);
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = @"SELECT [File], [ItemName], [ItemDescription], [Photographer name], [Date], [Environment site] FROM [Metadata$]";
connection.Open();
using (DbDataReader dr = command.ExecuteReader())
{
if (dr.HasRows)
{
while (dr.Read())
{
.......
}
}
}
connection.Close();
}
}
シートの名前を変更してみてください。または明示的に列を追加します。または、大文字と小文字が区別されるかどうかを確認します。
Excelファイルの場所を変更すると、このエラーは解決されます。ソースが存在するのと同じフォルダにファイルを置くことができます