excel选择所有表/工作表名称

时间:2018-08-14 07:49:59

标签: c# excel

我正在使用SQL以HERE的形式查询Excel文件,而且我知道可以通过以下方式获取工作表的内容:

var ds = new DataSet();
var conn = new OleDbConnection();
conn.Open();
var cmd = new OleDbDataAdapter("Select * FROM [Sheet1$]", conn);
cmd.Fill(ds, "ds1");

我想问问有没有办法获得所有表名?

我尝试过this answer,但没有用。

3 个答案:

答案 0 :(得分:1)

您是否要从所有工作表中获取数据? 如果是,那么请参见以下帖子:

How to import all the Excel sheets to DataSet in C#

答案 1 :(得分:1)

我尝试了示例链接中的代码,它对我有用:

            var result = reader.AsDataSet(new ExcelDataSetConfiguration()
            {
                UseColumnDataType = true,
                ConfigureDataTable = (data) => new ExcelDataTableConfiguration()
                {
                    UseHeaderRow = true
                }
            });

            DataTableCollection tables = result.Tables;

            for (int i = 0; i < tables.Count; i++)
            {
                Console.WriteLine(tables[i].TableName);
                //here I can work with current table
                for (int j = 0; j < tables[i].Columns.Count; j++)
                {
                    Console.WriteLine(tables[i].Columns[j].ColumnName);
                }
            }

答案 2 :(得分:0)

我只是找到一种通过以下方式获取所有工作表名称的方法:

var ds = new DataSet();
var conn = _connNoHeader = new OleDbConnection(string.Format("Provider={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=No;\";Data Source={1}", provider, filePath));           
conn.Open();

DataTable tables = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
                                             new object[] { null, null, null, "TABLE" });

Console.WriteLine("The tables are:");
foreach (DataRow row in tables.Rows)
    Console.Write("  {0}", row[2]);

// here are all worksheet name
var allWorksheetNames = tables.Rows.OfType<DataRow>().Select(row => row[2].ToString().TrimEnd('$')).ToList();

此解决方案来自HERE

其他答案也有帮助!