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

Coc*_*Dev 1 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"];
Run Code Online (Sandbox Code Playgroud)

use*_*261 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];
Run Code Online (Sandbox Code Playgroud)

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

还注意到你在使用的问题中

[columnName1],[columnName2],[columnName3]
Run Code Online (Sandbox Code Playgroud)

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

要获得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");
Run Code Online (Sandbox Code Playgroud)

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

F1 = A
F2 = B
F3 = C 
Run Code Online (Sandbox Code Playgroud)

等等.

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

或者你指着错误的文件(记住你必须在filename字符串中包含完整的文件路径.并确保表格是正确的.Alos注意到我$在我的字符串中包含不在我的参数中的事实所以只记得只提供您要获取的工作表的名称.如果您仍然无法为我提供您正在使用的工作表的完整文件名,C:\Book1.xlsm以及您尝试从中获取数据的工作表.