在程序開發中常常會遇到大量數據的操做問題,有的時候仍是少不了Excel,GSV等,須要進行數據文件類型的備份。html
固然能夠在數據端能夠操做。右點擊數據庫->任務->導出數據->數據源選擇應該導出的格式。下一步就能夠編寫SQL語句得到本身想要 的數據啦,可是這個須要操做數據庫,而真正的系統開發中,可以直接操做數據庫的人不多。因此這種方法只能做爲管理作臨時查詢時使用。數據庫
在開發過程當中,特別是進行查詢統計的時候,須要將一些數據報表,導出到Excel或者其它的存儲格式,用於打印、文檔分析、提交報告等。這就要求咱們在程序開發的時候進行處理,提供接口供用戶導出數據。下面就簡單介紹幾種將數據導出到Excel的方法。服務器
<1>將數據導出,存儲在服務器,而後提供連接用於用戶下載,其特色:app
結果能夠持久保存,用戶能夠下載歷史版本ide
佔用服務器空間post
依賴控件屬性this
具體的邏輯代碼以下:url
protected void Button2_Click(object sender, EventArgs e) { DataTable thisTable = AddTimeBusiness.getInstance().GetTable(); StringWriter stringWriter = new StringWriter(); HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); DataGrid excel = new DataGrid(); excel.DataSource = thisTable.DefaultView; //綁定到DataGrid excel.DataBind(); excel.RenderControl(htmlWriter); //這裏指定文件的路徑 string filestr = "d:\\data\\" + "11.xls"; int pos = filestr.LastIndexOf("\\"); string file = filestr.Substring(0, pos); if (!Directory.Exists(file)) { Directory.CreateDirectory(file); } System.IO.StreamWriter sw = new StreamWriter(filestr); sw.Write(stringWriter.ToString()); sw.Close(); }
<2>當用戶導出時,直接將數據導出客戶端,幾種方法,感受此類方法比較適用。spa
其特色:隨時生成,在服務器沒有保存副本,方便、快捷。excel
具體的邏輯代碼以下面小例子:
//根據須要獲得數據表
DataTable thisTable = getTable(condition.ToString());
if (thisTable != null)
{
StringWriter sw = new StringWriter();
sw.WriteLine("編號\t賬號\t姓名\t電話\t地址\t金額\t開通時間");
foreach (DataRow dr in thisTable.Rows)
{
sw.WriteLine(dr["F_ID"] + "\t" + dr["F_Psnid"] + "\t" + dr["F_Name"] + "\t" + dr["F_Tel"] + "\t" + dr["F_Address"] + "\t" + dr["F_TradeMoney"] + "\t" + dr["F_TradeTime"]);
}
sw.Close();
Response.AddHeader("Content-Disposition", "p_w_upload; filename=YinHeUserInfo.xls");
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.Write(sw);
Response.End();
}
補充:若是須要導出爲GSV文件,只須要上例分隔符「\t」用「,」替換就能夠了。
<3>便可下載到客戶端,又可以在服務器保存副本。能夠說,此方法知足了以上的兩種方法的功能。
若是你只想將結果保存在服務器端,則此種方法比第一種方法更加合理,不用過度的依賴控件的屬性。其實這就是一種文件流的操做。因此第一種方法不可取。
string filePath = "d:\\data.xls";//這個你能夠本身修改成虛擬路徑 FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("gb2312")); sw.WriteLine("編號\t賬號\t姓名\t電話\t地址\t金額\t開通時間"); foreach (DataRow dr in thisTable.Rows) { sw.WriteLine(dr["F_ID"] + "\t" + dr["F_Psnid"] + "\t" + dr["F_Name"] + "\t" + dr["F_Tel"] + "\t" + dr["F_Address"] + "\t" + dr["F_TradeMoney"] + "\t" + dr["F_TradeTime"]); } sw.Close(); fs.Close(); #region==若是要下載到客戶端,則添加下列代碼== //Response.AddHeader("Content-Disposition", "p_w_upload; filename=" + Server.UrlEncode(filePath)); //Response.ContentType = "application/ms-excel";// 指定返回的是一個不能被客戶端讀取的流,必須被下載 //Response.WriteFile(filePath); // 把文件流發送到客戶端 //Response.End();