C#取得Excel文件中Sheet页信息

在很多时候我们的系统中都允许用户上传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则没有"$"后缀。

原文地址:https://www.cnblogs.com/zhangronghua/p/GetSheetListFromExcelFile.html