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

时间:2014-04-17 04:59:07

标签: c# excel oledb

            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"

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

感谢您发帖..

1 个答案:

答案 0 :(得分:2)

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

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

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

enter image description here