用C#-选择工作表读取Excel文件

用C#-选择工作表读取Excel文件,c#,.net,excel,oledb,C#,.net,Excel,Oledb,我正在读一个带有C#和OleDB(12.0)的excel文件。在这里,我必须指定select语句以及我希望阅读的工作表的名称([Sheet1$]) 无论名称如何,是否可以选择第一张图纸 谢谢。有关如何按顺序获取图纸名称列表,请参见以下答案: 这是我的版本,略短一些: public static IEnumerable<string> GetExcelSheetNames(string excelFile) { var connectionString = "Provider=

我正在读一个带有C#和OleDB(12.0)的excel文件。在这里,我必须指定select语句以及我希望阅读的工作表的名称(
[Sheet1$]

无论名称如何,是否可以选择第一张图纸


谢谢。

有关如何按顺序获取图纸名称列表,请参见以下答案:

这是我的版本,略短一些:

public static IEnumerable<string> GetExcelSheetNames(string excelFile)
{
    var connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
          "Data Source=" + excelFile + ";Extended Properties=Excel 8.0;";
    using (var connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        using (var dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
        {
            return (dt ?? new DataTable())
                .Rows
                .Cast<DataRow>()
                .Select(row => row["TABLE_NAME"].ToString());
        }
    }
}
公共静态IEnumerable GetExcelSheetNames(字符串excelFile)
{
var connectionString=“Provider=Microsoft.Jet.OLEDB.4.0;”+
“数据源=“+excelFile+”;扩展属性=Excel 8.0;”;
使用(var连接=新的OLEDB连接(connectionString))
{
connection.Open();
使用(var dt=connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null))
{
返回(dt??新数据表())
.行
.Cast()
.Select(row=>row[“TABLE_NAME”].ToString());
}
}
}

有关如何按顺序获取图纸名称列表,请参见以下答案:

这是我的版本,略短一些:

public static IEnumerable<string> GetExcelSheetNames(string excelFile)
{
    var connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
          "Data Source=" + excelFile + ";Extended Properties=Excel 8.0;";
    using (var connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        using (var dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
        {
            return (dt ?? new DataTable())
                .Rows
                .Cast<DataRow>()
                .Select(row => row["TABLE_NAME"].ToString());
        }
    }
}
公共静态IEnumerable GetExcelSheetNames(字符串excelFile)
{
var connectionString=“Provider=Microsoft.Jet.OLEDB.4.0;”+
“数据源=“+excelFile+”;扩展属性=Excel 8.0;”;
使用(var连接=新的OLEDB连接(connectionString))
{
connection.Open();
使用(var dt=connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null))
{
返回(dt??新数据表())
.行
.Cast()
.Select(row=>row[“TABLE_NAME”].ToString());
}
}
}

这是可行的,但请注意,它似乎还返回了除工作表以外的其他内容,因此您可能需要过滤掉这些内容(我现在记不起来了,但我认为列表中也显示了命名范围或类似内容)。谢谢。顺便说一句,“Extended Properties=Excel 8.0”没有打开xlsx,必须使用“Extended Properties=Excel 12.0”。这是可行的,但请注意,它似乎还返回其他内容,而不仅仅是工作表,因此您可能必须过滤掉这些内容(我现在记不起来了,但我认为它是命名范围或类似于列表中显示的内容)谢谢顺便说一句,“ExtendedProperties=Excel8.0”不会打开xlsx,必须使用“ExtendedProperties=Excel12.0”。