分享

公共代码帮助类:下载页面、导出Excel(不带表头)、导出Execl(带表头)、 导出CSV、实现对IList到DataSet的转换

 醉人说梦 2014-07-25
  1. using System;  
  2. using System.Data;  
  3. using System.Web;  
  4. using System.Net;  
  5. using System.Text;  
  6. using System.IO;  
  7. using System.Collections.Generic;  
  8.   
  9. namespace IWOMTracker.Common  
  10. {  
  11.     public class PageText  
  12.     {  
  13.         /// <summary>  
  14.         /// 下载页面  
  15.         /// </summary>  
  16.         /// <param name="strUrl"></param>  
  17.         /// <returns></returns>  
  18.         public static string GetPageData(string strUrl)  
  19.         {  
  20.             string text = "";  
  21.             if (strUrl == "")  
  22.             {  
  23.                 return "";  
  24.             }  
  25.             WebResponse response = null;  
  26.             Stream responseStream = null;  
  27.             StreamReader reader = null;  
  28.             try  
  29.             {  
  30.                 response = WebRequest.Create(strUrl).GetResponse(); //创建一个合适的对象/ 2获得村服务器上得到的数据  
  31.                 responseStream = response.GetResponseStream(); //得到数据流  
  32.                 reader = new StreamReader(responseStream, Encoding.UTF8);  
  33.                 string txt = reader.ReadToEnd();  
  34.                 string encod = txt.Substring(txt.IndexOf("<meta"));  
  35.                 encod = encod.Substring(encod.IndexOf("charset=") + 8, 20);  
  36.                 response = WebRequest.Create(strUrl).GetResponse();  
  37.                 responseStream = response.GetResponseStream();  
  38.                 reader = new StreamReader(responseStream, Encoding.UTF8);  
  39.                 if (encod.ToLower().IndexOf("utf-8") >= 0)  
  40.                 {  
  41.                     reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));  
  42.                 }  
  43.                 else if (encod.ToLower().IndexOf("gb2312") >= 0)  
  44.                 {  
  45.                     reader = new StreamReader(responseStream, Encoding.GetEncoding("gb2312"));  
  46.                 }  
  47.                 else if (encod.ToLower().IndexOf("utf8") >= 0)  
  48.                 {  
  49.                     reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));  
  50.                 }  
  51.                 else if (encod.ToLower().IndexOf("gbk") >= 0)  
  52.                 {  
  53.                     reader = new StreamReader(responseStream, Encoding.GetEncoding("gbk"));  
  54.                 }  
  55.                 else  
  56.                 {  
  57.                     reader = new StreamReader(responseStream, Encoding.Default);  
  58.                 }  
  59.                 try  
  60.                 {  
  61.                     return reader.ReadToEnd();  
  62.                 }  
  63.                 catch  
  64.                 {  
  65.                     return "";  
  66.                 }  
  67.             }  
  68.             catch (Exception exn)  
  69.             {  
  70.                 if (exn.Message.ToString().IndexOf("远程服务器返回错误: (503) 服务器不可用") > -1)  
  71.                     text = "beifeng";  
  72.                 else  
  73.                     text = "";  
  74.             }  
  75.             finally  
  76.             {  
  77.                 if (reader != null)  
  78.                 {  
  79.                     reader.Close();  
  80.                 }  
  81.                 if (responseStream != null)  
  82.                 {  
  83.                     responseStream.Close();  
  84.                 }  
  85.                 if (response != null)  
  86.                 {  
  87.                     response.Close();  
  88.                 }  
  89.             }  
  90.             return text;  
  91.         }  
  92.   
  93.         public static string GetWebContent(string Url)  
  94.         {  
  95.             string strResult = "";  
  96.             try  
  97.             {  
  98.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);  
  99.                 //声明一个HttpWebRequest请求  
  100.                 request.Method = "GET";  
  101.                 request.SendChunked = false;  
  102.   
  103.                 request.Timeout = 10000;  
  104.                 //设置连接超时时间  
  105.                 request.Headers.Set("Pragma", "no-cache");  
  106.                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
  107.                 Stream streamReceive = response.GetResponseStream();  
  108.                 Encoding encoding = Encoding.GetEncoding("GB2312");  
  109.                 StreamReader streamReader = new StreamReader(streamReceive, encoding);  
  110.                 strResult = streamReader.ReadToEnd();  
  111.                 response.Close();  
  112.                 streamReader.Close();  
  113.             }  
  114.             catch (Exception ex)  
  115.             {  
  116.                 throw new Exception("抓取数据出错" + ex.Message);  
  117.             }  
  118.             return strResult;  
  119.         }  
  120.   
  121.         /// <summary>  
  122.         /// 导出Excel(不带表头)  
  123.         /// </summary>  
  124.         /// <param name="dt"></param>  
  125.         /// <param name="FileName"></param>  
  126.         /// <param name="response"></param>  
  127.         public static void CreateExcel(DataTable dt, string FileName, HttpResponse response)  
  128.         {  
  129.             HttpResponse resp;  
  130.             resp = response;  
  131.             FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(FileName));  
  132.             resp.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");  
  133.             resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");  
  134.             string ls_item = "";  
  135.   
  136.             //定义表对象与行对象,同时用DataSet对其值进行初始化   
  137.   
  138.             DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的  
  139.             int i = 0;  
  140.             int cl = dt.Columns.Count;  
  141.               
  142.             //向HTTP输出流中写入取得的数据信息   
  143.   
  144.             //逐行处理数据     
  145.             foreach (DataRow row in myRow)  
  146.             {  
  147.                 //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据       
  148.                 for (i = 0; i < cl; i++)  
  149.                 {  
  150.                     if (i == (cl - 1))//最后一列,加n  
  151.                     {  
  152.                         ls_item += row[i].ToString().Replace("\n", " ").Replace("\"", "\"\"") + "\n";  
  153.                     }  
  154.                     else  
  155.                     {  
  156.                         ls_item += row[i].ToString().Replace("\n", " ").Replace("\"", "\"\"") + "\t";  
  157.                     }  
  158.   
  159.                 }  
  160.                 resp.Write(ls_item.Replace("\r", " "));  
  161.                 ls_item = "";  
  162.   
  163.             }  
  164.             resp.End();  
  165.         }  
  166.   
  167.         /// <summary>  
  168.         /// 导出Execl(带表头)  
  169.         /// </summary>  
  170.         /// <param name="dt"></param>  
  171.         /// <param name="FileName"></param>  
  172.         /// <param name="response"></param>  
  173.         public static void CreateExcel2(DataTable dt, string FileName, HttpResponse response)  
  174.         {  
  175.             HttpResponse resp;  
  176.             resp = response;  
  177.             FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(FileName));  
  178.             resp.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");  
  179.             resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");  
  180.             string colHeaders = "", ls_item = "";  
  181.   
  182.             //定义表对象与行对象,同时用DataSet对其值进行初始化   
  183.   
  184.             DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的  
  185.             int i = 0;  
  186.             int cl = dt.Columns.Count;  
  187.   
  188.             //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符   
  189.             for (i = 0; i < cl; i++)  
  190.             {  
  191.                 if (i == (cl - 1))//最后一列,加n  
  192.                 {  
  193.                     colHeaders += dt.Columns[i].Caption.ToString().Replace("\n", " ").Replace("\"", "\"\"") + "\n";  
  194.                 }  
  195.                 else  
  196.                 {  
  197.                     colHeaders += dt.Columns[i].Caption.ToString().Replace("\n", " ").Replace("\"", "\"\"") + "\t";  
  198.                 }  
  199.   
  200.             }  
  201.             resp.Write(colHeaders.Replace("\r", " "));  
  202.             //向HTTP输出流中写入取得的数据信息   
  203.   
  204.             //逐行处理数据     
  205.             foreach (DataRow row in myRow)  
  206.             {  
  207.                 //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据       
  208.                 for (i = 0; i < cl; i++)  
  209.                 {  
  210.                     if (i == (cl - 1))//最后一列,加n  
  211.                     {  
  212.                         ls_item += row[i].ToString().Replace("\n", " ").Replace("\"", "\"\"") + "\n";  
  213.                     }  
  214.                     else  
  215.                     {  
  216.                         ls_item += row[i].ToString().Replace("\n", " ").Replace("\"", "\"\"") + "\t";  
  217.                     }  
  218.   
  219.                 }  
  220.                 resp.Write(ls_item.Replace("\r", " "));  
  221.                 ls_item = "";  
  222.   
  223.             }  
  224.             resp.End();  
  225.         }  
  226.   
  227.         /// <summary>  
  228.         /// 导出CSV  
  229.         /// </summary>  
  230.         /// <param name="tb">DataTable</param>  
  231.         /// <param name="response">Page.Response</param>  
  232.         /// <param name="fileName">导出文件名</param>  
  233.         /// <param name="isHeader">是否导出tb表头</param>  
  234.         public static void ExportCSV(DataTable tb, HttpResponse response, string fileName, bool isHeader)  
  235.         {  
  236.             string data = "";  
  237.   
  238.             //写出列名  
  239.             if (isHeader)  
  240.             {  
  241.                 foreach (DataColumn column in tb.Columns)  
  242.                 {  
  243.                     data += column.ColumnName.Replace(",", ",") + ",";  
  244.                 }  
  245.                 data += "\n";  
  246.             }  
  247.   
  248.             //写出数据  
  249.             foreach (DataRow row in tb.Rows)  
  250.             {  
  251.                 foreach (DataColumn column in tb.Columns)  
  252.                 {  
  253.                     data += row[column].ToString().Replace(",", ",") + ",";  
  254.                 }  
  255.                 data += "\n";  
  256.             }  
  257.             data += "\n";  
  258.   
  259.             string temp = string.Format("attachment;filename={0}", fileName + ".csv");  
  260.             response.ClearHeaders();  
  261.             response.AppendHeader("Content-disposition", temp);  
  262.             response.Charset = "gb2312";  
  263.             response.ContentType = "application/ms-excel";  
  264.             response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");  
  265.             response.Write(data);  
  266.             response.End();  
  267.         }  
  268.   
  269.         /// <summary>  
  270.         /// 实现对IList到DataSet的转换  
  271.         /// </summary>  
  272.         /// <param name="list">待转换的IList</param>  
  273.         /// <returns>转换后的DataSet</returns>  
  274.         public static DataSet IListToDataSet<T>(IList<T> list, Type type)  
  275.         {  
  276.             if (list == null || list.Count <= 0)  
  277.             {  
  278.                 return null;  
  279.             }  
  280.   
  281.             DataSet ds = new DataSet();  
  282.             DataTable dt = new DataTable(type.Name);  
  283.             DataColumn column;  
  284.             DataRow row;  
  285.   
  286.             System.Reflection.PropertyInfo[] myPropertyInfo = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);  
  287.   
  288.             foreach (T t in list)  
  289.             {  
  290.                 if (t == null)  
  291.                 {  
  292.                     continue;  
  293.                 }  
  294.   
  295.                 row = dt.NewRow();  
  296.   
  297.                 for (int i = 0, j = myPropertyInfo.Length; i < j; i++)  
  298.                 {  
  299.                     System.Reflection.PropertyInfo pi = myPropertyInfo[i];  
  300.   
  301.                     string name = pi.Name;  
  302.   
  303.                     if (dt.Columns[name] == null)  
  304.                     {  
  305.                         column = new DataColumn(name, pi.PropertyType);  
  306.                         dt.Columns.Add(column);  
  307.                     }  
  308.   
  309.                     row[name] = ((object[])(object)t)[i] == null ? DBNull.Value : ((object[])(object)t)[i];  
  310.                 }  
  311.   
  312.                 dt.Rows.Add(row);  
  313.             }  
  314.   
  315.             ds.Tables.Add(dt);  
  316.   
  317.             return ds;  
  318.         }  
  319.     }  
  320. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约