#region 读取Excel中的数据
/// <summary>
/// 读取Excel中的数据 支持表头(.xlsx) 不支持表头(.xls)
/// </summary>
/// <param name="fileName">Excel文件路径</param>
/// <returns>Excel中的数据</returns>
public DataTable GetTable(string fileName)
{
OleDbConnection Conn = null;
DataTable dt = null;
string connString = string.Empty;
OleDbDataAdapter da = new OleDbDataAdapter();
DataTable dataTable = new DataTable();
try
{
string FileType = fileName.Substring(fileName.LastIndexOf("."));
if (FileType == ".xls")
connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
else//.xlsx
connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
// 创建连接对象
Conn = new OleDbConnection(connString);
// 打开数据库连接
Conn.Open();
//获取Excel工作薄中Sheet页(工作表)名集合
DataTable ss = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
string sql_F = "Select * FROM [{0}]";
for (int i = 0; i < ss.Rows.Count; i++)
{
da.SelectCommand = new OleDbCommand(String.Format(sql_F, ss.Rows[i][2].ToString()), Conn);
da.Fill(dataTable);
}
return dataTable;
}
catch (Exception)
{
return null;
}
finally
{
// 释放
if (Conn != null)
{
Conn.Close();
Conn.Dispose();
}
if (dt != null)
{
dt.Dispose();
}
}
}
#endregion
注意:
1.若是报“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法”错误
解决办法:
2.07版本后的excel支持有表头是转变;.xls格式的excel不支持有表头的转换 会提示:System.Data.OleDb.OleDbException:“外部表不是预期的格式。”(若是有好的办法 请指教)