1

消息说

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"];
4

2 回答 2

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 请注意我$在字符串中包含的事实而不是在我的参数中,所以请记住仅只输入您要获取的工作表的名称。如果您仍然遇到问题,请向我提供您正在使用的工作表的完整文件名,即C:\Book1.xlsm您尝试从中获取数据的工作表。

于 2013-04-19T16:21:36.507 回答
-1

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

于 2016-08-12T17:31:17.903 回答