web-dev-qa-db-ja.com

Microsoft Jetデータベースエンジンはオブジェクト 'Sheet1 $'を見つけることができませんでした

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

コードがワークシートを見つけられない理由を理解できません。これはなぜですか、どうすれば解決できますか?

11
Curt

問題を見つけました。

スプレッドシートが間違った場所に保存されていたため、filepathが存在するファイルを指していませんでした。

別のエラーメッセージが表示されることを想定していたので、最初はこれを確認しませんでした。 「Book1.xlsが見つかりませんでした」のようなもの。ただし、存在しない場合は、ワークシートが見つからないというメッセージが表示されます。

14
Curt

ファイル名に以下のような追加のドット文字がある場合:

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.
4
volody

また、Excelでファイルを開いていないことを確認してください。他の場所で開いていると、ファイルを読み取ることができません。同じエラーが発生し、ファイルをExcelで開いていることに気付きました。

1
ajwaka

このリンクからコーディングされた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();
}
0
vijai bharath

よくわかりませんが、よく機能する同様のコード(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();
    }
}

シートの名前を変更してみてください。または明示的に列を追加します。または、大文字と小文字が区別されるかどうかを確認します。

0
Dante

Excelファイルの場所を変更すると、このエラーは解決されます。ソースが存在するのと同じフォルダにファイルを置くことができます

0
Zohaib Iqbal