最近在弄excel读写,在网上搜了很多例子,有的会有点问题,经过修改后,这个函数是可以使用,提供给大家。
写博客的目的就是为了激发别人也写下,这样才能让大家搜到更多有用的资料。
注意:
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//要想获取excel中全部内容,最好在excel中将全部内容是设置为字符型(目前我是强制将excel内容都设置为了字符型)
//参考:https://blog.csdn.net/fupei/article/details/5886058
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// 获取excel内容
/// </summary>
/// <param name="strExcelPath"></param>
/// <param name="tableName"></param>
/// <returns></returns>
public static DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)
{
try
{
DataTable dtExcel = new DataTable();
//数据表
DataSet ds = new DataSet();
//获取文件扩展名
string strExtension = System.IO.Path.GetExtension(strExcelPath);
string strFileName = System.IO.Path.GetFileName(strExcelPath);
//Excel的连接
OleDbConnection objConn = null;
switch (strExtension)
{
case ".xls":
objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=2;\"");
break;
case ".xlsx":
objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=2;\"");
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);
bool bHadPage = false;//检查是否有这个表
//获取Excel的第一个Sheet表名
for (int i = 0; i < schemaTable.Rows.Count; i++)
{
string tableNameTmp = schemaTable.Rows[i][2].ToString().Trim();
if (tableNameTmp == tableName + "$")
{
//有这个表
bHadPage = true;
}
}
if (!bHadPage)
{
//没有这个表
objConn.Close();
return null;
}
//string tableName = schemaTable.Rows[0][2].ToString().Trim();
//string strSql = "select * from [" + tableName + "]";
string strSql = "select * from [" + tableName + "$]";
//获取Excel指定Sheet表中的信息
OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
myData.Fill(ds, tableName);//填充数据
objConn.Close();
//dtExcel即为excel文件中指定表中存储的信息
dtExcel = ds.Tables[tableName];
return dtExcel;
}
catch (Exception ex)
{
ShareMem.SetMessage("获取Excel文件失败:" + ex.Message);
ShareMem.SetMessage("请尝试安装安装目录下DLL\\AccessDatabaseEngine.rar文件");
return null;
}
}