搜尋此網誌

2011年9月6日 星期二

DataTable轉EXCEL

通常我們在匯入excel後會在多產生一個錯誤報表給使用者更新
這邊提供的方法為
A網頁
.aspx

function erxls()
 {
        if(confirm("匯入完畢,是否匯出錯誤報表"))
       {
            window.open('B.aspx','錯誤資訊')
       }
      else
      {
   return false;
      }
 }



.cs檔
判斷產生的datatable有無資料
有資料後
將datatable存入Session
呼叫javascript function   erxls()


B網頁
DataTable errResult = (DataTable)Session["errResult"];

 if (errResult.Rows.Count > 0)
 {
                //呼叫APP_CODE中的CS檔
                XXXX ai = new XXXX();
                StringBuilder sb = ai.DtToExcel(errResult);
                //假如在A網頁中直接呼叫由於被清掉的緣故會導致畫面變成一片
                // 空白所以在這邊我們採用另開視窗的方式
                Response.ClearHeaders();
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.Buffer = true;
                Response.Expires = 0;
                Response.AddHeader("Content-Disposition", "attachment; filename=" + "error" + ".xls");
                Response.Write("<meta https-equiv=Content-Type content=text/html;charset=UTF-8>");
                Response.Charset = "UTF-8";
                Response.Write(sb);
                Response.End();
}


App_Code

public StringBuilder DtToExcel(DataTable dt)
{
         StringBuilder sb = new StringBuilder();
         if (dt.Rows.Count >0)
         {
             
             sb.Append("<html><body>");
             sb.Append("<table  cellspacing='0' cellpadding='0' width='50px'>");
             for ( int ii = 0 ; ii<= dt.Rows.Count - 1;ii++)
             {
                 sb.Append("<tr><td colspan='1' align='center'>欄位名稱:" + dt.Rows[ii]["XX"] + "</td> ");
                 sb.Append("<td colspan='1' align='center'>欄位名稱:" + dt.Rows[ii]["XXX"] + "</td>");
                 sb.Append("<td colspan='1' align='left'>欄位名稱:" + dt.Rows[ii]["XXX"] + "</td></tr> ");
             }
             sb.Append("</table>");
             sb.Append("</body></html>");
         }
         return sb;
}





沒有留言:

張貼留言