我正在尝试阅读名为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
我无法理解为什么代码找不到我的工作表。为什么会这样,我该如何解决?
答案 0 :(得分:13)
我发现了问题。
电子表格似乎被保存到错误的位置,因此filepath
未指向存在的文件。
我最初没有检查这个,因为我假设会出现不同的错误消息。像“Book1.xls”找不到的东西。但是,如果它不存在,那么该消息将仅表明它找不到工作表。
答案 1 :(得分:3)
如果文件名有下面的附加点字符:
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.
答案 2 :(得分:1)
另外 - 确保您没有在Excel中打开文件。如果文件在其他地方打开,您将无法读取该文件。我有同样的错误,并意识到我在Excel中打开了文件。
答案 3 :(得分: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();
}
}
尝试重命名您的工作表;或明确添加列;或检查它是否区分大小写。
答案 4 :(得分:0)
更改您的Excel文件位置,此错误将得到解决。 可能会将您的文件放在源文件所在的同一文件夹中
答案 5 :(得分: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();
}