工作中經常會遇到導出Excel,Asp.net導出Excel可以用Response.writ()方法,將dataset或datagrid中的數據輸出成excel,或者使用Excel.Application對象生成Excel文件,這個兩種方法都可以得到想要輸出的數據,但是都有弊端,前一種輸出方式得到的Excel文件並不是真正的Excel文件,當把它作爲導入Excel源文件再次導入時,就會拋出異常,提示“不是預期的數據格式”,這樣就不便於用戶的使用,而後一種可以得到標準的Excel文件,但是在Web平臺中,在多用戶大數據量操作時,很佔用系統資源,影響運行效率,對於這樣的業務需求,可以考慮使用Oledb的方式導出Excel,通過連接Excel數據源,使用Insert語句,將數據插入到Excel中。
//連接字符串
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Excel文件路徑及文件全名;Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'";
//定義連接對象
OleDbConnection objConn = new OleDbConnection(connString)
//打開連接
objConn.Open();
//循環讀取DataTable中數據,逐行插入到Excel文件中
for (int row = 0; row < dt.Rows.Count; row++)
{
StringBuilder sb = new StringBuilder();
string sql = "";
//拼接Insert語句
sql = " insert into [sheet1$]( ";
for (int col = 0; col < dt.Columns.Count; col++)
{
if (col < dt.Columns.Count- 1)
sql += dt.Columns[col].ColumnName + ",";
else
sql += dt.Columns[col].ColumnName + ") values (";
}
sb.Append(sql);
for (int col = 0; col < dt.Columns.Count; col++)
{
if (col < dt.Columns.Count- 1)
sb.Append("'" + dt.Rows[row][col].ToString() + "',");
else
sb.Append("'" + dt.Rows[row][col].ToString() + "')");
}
objCmd.CommandText = sb.ToString();
objCmd.ExecuteNonQuery();//執行insert語句
}
oledb鏈接字符串中IMEX有三種模式:
當 IMEX=0 時爲“匯出模式”,這個模式開啓的 Excel 檔案只能用來做“寫入”用途。
當 IMEX=1 時爲“匯入模式”,這個模式開啓的 Excel 檔案只能用來做“讀取”用途。
當 IMEX=2 時爲“連結模式”,這個模式開啓的 Excel 檔案可同時支持“讀取”與“寫入”用途。