12

Book1.xlsと呼ばれるワークシートを含むと呼ばれるスプレッドシートファイルを読み込もうとしています。Sheet1

ただし、次のエラーが発生します。

MicrosoftJetデータベースエンジンはオブジェクト'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

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

4

6 に答える 6

15

問題が見つかりました。

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

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

于 2012-04-13T11:05:48.403 に答える
0

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

于 2013-11-28T06:02:04.667 に答える
0

このリンクからコード化された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();
}
于 2016-02-06T02:15:09.103 に答える
0

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

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

于 2012-04-13T09:06:28.860 に答える