在很多时候我们的系统中都允许用户上传Excel文件,这时如果用户上传得Excel文件有多个Sheet页我们就需要遍历Sheet页, 那怎么才能取得所有Sheet页的列表哪,请看下面的代码:

public List<string> GetExcelSheetNames(string excelFileFullPath, bool isIncludeName)
{
var fileType
= Path.GetExtension(excelFileFullPath.ToLower()).Trim();
var excelVersionNumber
= fileType == ".xlsx" ? "12.0" : "8.0";

OleDbConnection objConn
= null;
DataTable dt
= null;
var sheetList
= new List<string>();

try
{
var connString
= string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0} ;Extended Properties=\"Excel {1};HDR=Yes;IMEX=2;\"", excelFileFullPath, excelVersionNumber);

objConn
= new OleDbConnection(connString);
objConn.Open();
dt
= objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

if (dt == null)
{
return sheetList;
}

foreach (DataRow row in dt.Rows)
{
var sheetName
= row["TABLE_NAME "].ToString();
if(isIncludeName)
{
sheetList.Add(sheetName);
continue;
}
else
{
if (sheetName.EndsWith("$"))
{
sheetList.Add(sheetName);
}
}
}

return sheetList;
}
finally
{
if (objConn != null)
{
objConn.Close();
objConn.Dispose();
}
if (dt != null)
{
dt.Dispose();
}
}
}

代码比较简单,不多做解释,唯一需要注意的是isIncludeName这个参数,如果isIncluedeName == true,表示我们不光要返回Sheet页的列表,还要返回用户再Excel的"Name Manager"中定义的Name. Name和Sheet的唯一区别是所有的Sheet在DBSchemaTable.["Table_Name"]中都以"$"结尾(如:Sheet1$, Sheet2$),而Name则没有"$"后缀。

作者: 张荣华 发表于 2011-03-30 06:21 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"