C# 无法使用OLEDB驱动程序读取Excel工作表

C# 无法使用OLEDB驱动程序读取Excel工作表,c#,oledb,C#,Oledb,我有一个excel文件和一个工作表。我正在使用MicroSoft.Office.Interop.Excel读取此文件,然后执行进一步的执行 这是我的密码: connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + strNewPath + ";Extended Properties=Excel 8.0;"; conn = new OleDbConnection(connString);

我有一个excel文件和一个工作表。我正在使用MicroSoft.Office.Interop.Excel读取此文件,然后执行进一步的执行

这是我的密码:

 connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + strNewPath + ";Extended Properties=Excel 8.0;";
               conn = new OleDbConnection(connString);
                if (conn.State == ConnectionState.Closed)
                    conn.Open();
                System.Data.DataTable dt = null;
                dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

但是,工作表不在数据表对象中。

您提到的表(工作表)名称的位置

参考这里


如果您想玩游戏,请参考

OleDbConnection-ocann=new-OleDbConnection(@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+fileName+”;扩展属性=Excel 12.0;”)

//在这里连接到Excel工作表后,我们将选择数据
//使用Excel工作表中的select语句
oconn.Open();
DataTable dbSchema=ocann.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
if(dbSchema==null | | dbSchema.Rows.Count<1)
{
抛出新异常(“错误:无法确定第一个工作表的名称。”);
}
string firstSheetName=dbSchema.Rows[0][“TABLE_NAME”].ToString();
字符串tbstrat=“M1000”;
OleDbCommand cmd=新的OleDbCommand();
cmd.Connection=oconn;
cmd.CommandText=“从[”+firstSheetName+“B8:“+tbstrat+”]中选择*;
OleDbDataAdapter adap=新的OleDbDataAdapter();
DataTable dt=新的DataTable();
adap.SelectCommand=cmd;
adap.Fill(dt);
oconn.Close();
即使你也可以试试这个

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "NameHere");

DataTable data = ds.Tables["NameHere"];

你犯了什么错误?没有错误,但我无法得到工作表。dt.Count是0。几个问题:1。是XLS还是XLSX?2.工作表是否有密码保护?3.您是否调试了OLEDB连接是否成功?1.它是XLSX文件2。工作表没有密码保护3。连接成功之前,相同的代码工作正常。现在唯一的区别是我使用不同的excel文件进行处理;对第二个参数是受限列show我能否提及工作表名称,因为在代码的这一点上,工作表的名称未被访问,是否有任何方法获取工作表名称?我已更新答案以获取工作表名称。看看是否有帮助。PS:为.Rows[]指定正确的数组
        //After connecting to the Excel sheet here we are selecting the data 
        //using select statement from the Excel sheet
        oconn.Open();
        DataTable dbSchema = oconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        if (dbSchema == null || dbSchema.Rows.Count < 1)
        {
            throw new Exception("Error: Could not determine the name of the first worksheet.");
        }
        string firstSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();

        string tbstrat = "M1000";
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = oconn;
        cmd.CommandText = "select * from [" + firstSheetName + "B8:" + tbstrat + "]";
        OleDbDataAdapter adap = new OleDbDataAdapter();
        DataTable dt = new DataTable();
        adap.SelectCommand = cmd;
        adap.Fill(dt);
        oconn.Close();
var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "NameHere");

DataTable data = ds.Tables["NameHere"];