读取Excel表
我采用的是ADO.NET的方式连接Excel表,方法跟网上介绍的有很多,我这里不就说了。有兴趣的话可以访问:
http://www.cnblogs.com/Jinglecat/archive/2006/08/15/477472.html
我这里主要讲一下如何动态的获取Excel表名和每个表中列名。
获取表名的方法是:
DataTable dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
获取列名的方法是:
DataTable dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "Sheet1$", null });
比较难理解的地方就是这个参数:new object[] { null, null, null, "TABLE" },在MSDN查了一下,下面是它那里的描述:
Tables 映射到 OLE DB TABLES 行集合。除非另外指定,否则将按下列顺序返回限制列。
限制列 |
CLR 数据类型 |
说明 |
---|---|---|
TABLE_CATALOG |
string |
目录名称。如果提供程序不支持目录,则为 null 值。 |
TABLE_SCHEMA |
string |
非限定的架构名称。如果提供程序不支持架构,则为 null 值。 |
TABLE_NAME |
string |
表名称。返回的列不能包含 null 值。 |
TABLE_TYPE |
string |
表类型。以下之一或提供程序特定的值:“ALIAS”、“TABLE”、“SYNONYM”、“SYSTEM TABLE”、“VIEW”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”或“SYSTEM VIEW”。返回的列不能包含 null 值。 |
Columns 映射到 OLE DB COLUMNS 行集合。除非另外指定,否则将按下列顺序返回限制列。
限制列 |
CLR 数据类型 |
说明 |
---|---|---|
TABLE_CATALOG |
string |
目录名称。如果提供程序不支持目录,则为空值。 |
TABLE_SCHEMA |
string |
非限定的架构名称。如果提供程序不支持架构,则为空值。 |
TABLE_NAME |
string |
表名称。返回的列不能包含空值。 |
COLUMN_NAME |
string |
列的名称;它可能不唯一。如果无法确定该名称,则返回空值。此列与 COLUMN_GUID 和 COLUMN_PROPID 列一起形成列 ID。根据提供程序使用的 DBID 结构元素,其中的一个或多个列将为空值。如果可能,结果列 ID 应持久保持。然而,某些提供程序不支持列的持久性标识符。基表的列 ID 应该在视图下保持不变。 |
在这里,可以指定Table_Name的值来获取指定的表的列架构。