/// <summary> /// 導出功能 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_export_Click(object sender, EventArgs e) { try { string strSql = CreateStrWhere(); DataTable dst = ShDonBLL.GetListForEXport(strSql).Tables[0]; if (dst.Rows.Count<=0) { Jscript.Alert(this, "查詢數據爲空,沒有數據導出,請從新選擇條件!"); return; } DataTable ds = UpdateDataTable(dst); for (int i = 0; i < ds.Rows.Count; i++) { DataColumn dc = ds.Columns[1];//i就是第幾列或者用列名也能夠 dc.DataType = typeof(String); string eid = ds.Rows[i]["裝置名稱"].ToString(); string tyid = ds.Rows[i]["類別"].ToString(); if (!string.IsNullOrEmpty(eid)) { ds.Rows[i]["裝置名稱"] = GetEqui(eid); } if (!string.IsNullOrEmpty(tyid)) { ds.Rows[i]["類別"] = GetZG(tyid); } } //DataTableExcel(ds,"測試0",""); } catch (Exception ex) { throw ex; } } /// <summary> /// 修改數據表DataTable某一列的類型和記錄值(正確步驟:1.克隆表結構,2.修改列類型,3.修改記錄值,4.返回但願的結果) /// </summary> /// <param name="argDataTable">數據表DataTable</param> /// <returns>數據表DataTable</returns> private DataTable UpdateDataTable(DataTable argDataTable) { DataTable dtResult = new DataTable(); //克隆表結構 dtResult = argDataTable.Clone(); foreach (DataColumn col in dtResult.Columns) { if (col.ColumnName == "裝置名稱" || col.ColumnName == "類別") { //修改列類型 col.DataType = typeof(String); } } foreach (DataRow row in argDataTable.Rows) { DataRow rowNew = dtResult.NewRow(); rowNew["序號"] = row["序號"]; rowNew["裝置名稱"] = row["裝置名稱"]; rowNew["停工時間"] = row["停工時間"]; rowNew["開工時間"] = row["開工時間"]; rowNew["正常時間"] = row["正常時間"]; rowNew["停工緣由"] = row["停工緣由"]; rowNew["類別"] = row["類別"]; rowNew["停工時間小時"] = row["停工時間小時"]; rowNew["年度"] = row["年度"]; dtResult.Rows.Add(rowNew); } return dtResult; } #region DataTable導出到Excel /// <summary> /// DataTable導出到Excel /// </summary> /// <param name="pData">DataTable</param> /// <param name="pFileName">導出文件名</param> /// <param name="pHeader">導出標題以|分割</param> public static void DataTableExcel(System.Data.DataTable pData, string pFileName, string pHeader) { System.Web.UI.WebControls.DataGrid dgExport = null; // 當前對話 System.Web.HttpContext curContext = System.Web.HttpContext.Current; // IO用於導出並返回excel文件 System.IO.StringWriter strWriter = null; System.Web.UI.HtmlTextWriter htmlWriter = null; if (pData != null) { string UserAgent = curContext.Request.ServerVariables["http_user_agent"].ToLower(); if (UserAgent.IndexOf("firefox") == -1)//火狐瀏覽器 pFileName = HttpUtility.UrlEncode(pFileName, System.Text.Encoding.UTF8); curContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + pFileName + ".xls"); curContext.Response.ContentType = "application/vnd.ms-excel"; strWriter = new System.IO.StringWriter(); htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); // 爲了解決dgData中可能進行了分頁的狀況,須要從新定義一個無分頁的DataGrid dgExport = new System.Web.UI.WebControls.DataGrid(); dgExport.DataSource = pData.DefaultView; dgExport.AllowPaging = false; dgExport.ShowHeader = true;//顯示標題 dgExport.DataBind(); string[] arrHeader = pHeader.Split('|'); string strHeader = "<table border=\"1\" style=\"background-color:Gray;font-weight:bold;\"><tr>"; foreach (string j in arrHeader) { strHeader += "<td>" + j.ToString() + "</td>"; } strHeader += "</tr></table>"; // 返回客戶端 dgExport.RenderControl(htmlWriter); string strMeta = "<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>"; curContext.Response.Write(strMeta + strHeader + strWriter.ToString()); curContext.Response.End(); } }