开发环境
Visual Studio2017
依赖项
System.Data.OleDb.dll
代码块
try
{
Dictionary<string, DataTable> result = new Dictionary<string, DataTable>();
//数据表
DataSet ds = new DataSet();
//获取文件扩展名
string strExtension = System.IO.Path.GetExtension(filePath).ToLower();
string strFileName = System.IO.Path.GetFileName(filePath);
//Excel、mdb的连接
System.Data.OleDb.OleDbConnection objConn = null;
switch (strExtension)
{
case ".mdb":
objConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" + filePath);
break;
case ".xls":
objConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";" + "Extended Properties=\"Excel 8.0;HDR=yes;IMEX=1;\"");
break;
case ".xlsx":
objConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";" + "Extended Properties=\"Excel 12.0;HDR=yes;IMEX=1;\"");//此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串) 备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数,"HDR=No;"正好与前面的相反。"IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。
break;
default:
objConn = null;
break;
}
if (objConn == null)
{
return null;
}
objConn.Open();
//获取Excel中所有Sheet表的信息
System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
DataRow[] drs = schemaTable.Select("TABLE_TYPE like 'TABLE'");
string[] sheetNames = new string[drs.Length];
//获取Excel的第一个Sheet表名
for (int index = 0; index < drs.Length; index++)
{
string sheetName = drs[index][2].ToString().Trim(); ;
sheetNames[index] = sheetName;
string strSql = string.Format("select * from [{0}]",sheetName);
//获取Excel指定Sheet表中的信息
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand(strSql, objConn);
System.Data.OleDb.OleDbDataAdapter myData = new System.Data.OleDb.OleDbDataAdapter(strSql, objConn);
myData.Fill(ds, sheetName);//填充数据
result.Add(sheetName, ds.Tables[0]);
}
objConn.Close();
//dtExcel即为excel文件中指定表中存储的信息
return result;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + "\r\n" + ex.StackTrace);
return null;
}
未完待续…