C#(.net)讀取excel資料 轉為datatable
#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:“外部表不是預期的格式。”(若是有好的辦法 請指教)