C#GetOleDbSchemaTable。第一个Excel工作表的名称及其列

问题描述 投票:1回答:1
            try
            {
                string connectionString = string.Empty;

                if (Path.GetExtension(fileName) == ".xlsx")
                {
                    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName +
                        ";Extended Properties=Excel 12.0;";
                }
                else
                {
                    Debug.Print(connectionString);
                    connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.Combine(Server.MapPath("~/Content"), fileName) + ";Extended Properties=Excel 8.0;";
                    //connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path.Combine(Server.MapPath("~/Content"), fileName) + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
                }

                OleDbCommand selectCommand = new OleDbCommand();
                OleDbConnection connection = new OleDbConnection();
                OleDbDataAdapter adapter = new OleDbDataAdapter();
                connection.ConnectionString = connectionString;

                if (connection.State != ConnectionState.Open)
                    connection.Open();

                //connection.Get
                DataTable dtSchema = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);


            }
            catch (Exception ex)
            {
                Debug.Print(ex.ToString());
            }

connection.Open()似乎连接得很好。现在我得到了一个dtSchema数据表对象。我需要获取Excel工作表的名称或获得的工作表(如果有的话)。我也在扫描对象以找出列名称的位置。模式中应该有一些列。是否记录了列的位置?当我在我的即时窗口中输出一些内容时:

dtSchema.Columns[0].ToString()
"TABLE_CATALOG"
dtSchema.Columns[1].ToString()
"TABLE_SCHEMA"
dtSchema.Columns[2].ToString()
"TABLE_NAME"
dtSchema.Columns[3].ToString()
"TABLE_TYPE"

这些不是第一个工作表的列名,我正在寻找的主要是第一个工作表的名称及其列。

感谢您的发表..

c# excel oledb
1个回答
2
投票

如果要查找列名称。查看结果COLUMN_NAME列

 DataTable dtCols = this.connection.GetSchema("Columns");

TABLE_NAME也有助于您的案例识别工作表。

© www.soinside.com 2019 - 2024. All rights reserved.