使用C#读取Excel文件会导致抛出OleDbException

时间:2013-04-19 14:51:18

标签: c# excel

消息说

  

Microsoft Access数据库引擎找不到该对象   '工作表Sheet1 $'。确保对象存在,并拼写其名称和   路径名称正确。如果'Sheet1 $'不是本地对象,请检查   您的网络连接或联系服务器管理员。

工作表中工作表的名称是“Sheet1”

        string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"";", fileName);
        string query = String.Format("SELECT [columnName1],[columnName2],[columnName3] from [{0}]", "Sheet1$");
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
        DataSet dataSet = new DataSet();
        dataAdapter.Fill(dataSet);
        DataTable YourTable = dataSet.Tables[0];
        listBox1.DataSource = YourTable.Columns["ColumnName1"];

2 个答案:

答案 0 :(得分:5)

这对我有用:

string filename = @"C:\Book1.xlsm";

        string connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES\";", filename);
        string query = String.Format("SELECT * from [{0}$]", "Sheet1");
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
        DataSet dataSet = new DataSet();
        dataAdapter.Fill(dataSet);
        DataTable YourTable = dataSet.Tables[0];

* 注:* 如果您的数据没有标题HDR=NO

另请注意,您在问题中使用了

[columnName1],[columnName2],[columnName3]

供您选择的列。请记住,这些应该是您想要抓取的列中第一个单元格的值。

获取E栏使用:

        string connectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\";", filename);
        string query = String.Format("SELECT [F5] from [{0}$]", "Sheet1");

替换5您需要的任何其他列号

F1 = A
F2 = B
F3 = C 

等等。

您获得的错误可能是因为您打开并激活了该文件。

或者你指的是错误的文件(记住你必须在filename字符串中包含完整的文件路径。并确保表格正确.Alos注意到我包括{{1在我的字符串中,而不是在我的参数中,所以只记住你想要获取的工作表的名称。如果你仍然无法为我提供你正在使用的工作表的完整文件名,即{{1}和您尝试从中获取数据的工作表。

答案 1 :(得分:-1)

请在Sheet1周围加上方括号。 所以你的查询是:select * from [Sheet1 $]