zoukankan      html  css  js  c++  java
  • DataSet导出Excel,比以往的方法导出的Excel外观更加好看

    原文发布时间为:2010-06-21 —— 来源于本人的百度文章 [由搬家工具导入]

    ======目前方法=========== #region 生成Excel
    /// <summary>
    /// DataSet导出Excel
    /// </summary>
    /// <param name="arrTitle">列标题,若为null,则直接取dataset列标题</param>
    /// <param name="ds">要导出的DataSet</param>
    /// <param name="fileName">Excel文件名,不需要传入扩展名</param>
    protected void CreateExcel(string[] arrTitle, DataSet ds, string fileName)
    {
    StringBuilder strb = new StringBuilder();
    strb.Append(" <html xmlns:o="urn:schemas-microsoft-com:office:office"");
    strb.Append("xmlns:x="urn:schemas-microsoft-com:office:excel"");
    strb.Append("xmlns="http://www.w3.org/TR/REC-html40"");
    strb.Append(" <head> <meta http-equiv='Content-Type' content='text/html; charset=gb2312'>");
    strb.Append(" <style>");
    strb.Append(".xl26");
    strb.Append(" {mso-style-parent:style0;");
    strb.Append(" font-family:"Times New Roman", serif;");
    strb.Append(" mso-font-charset:0;");
    strb.Append(" mso-number-format:"@";}");
    strb.Append(" </style>");
    strb.Append(" <xml>");
    strb.Append(" <x:ExcelWorkbook>");
    strb.Append("  <x:ExcelWorksheets>");
    strb.Append("  <x:ExcelWorksheet>");
    strb.Append("    <x:Name>Sheet1 </x:Name>");
    strb.Append("    <x:WorksheetOptions>");
    strb.Append("    <x:DefaultRowHeight>285 </x:DefaultRowHeight>");
    strb.Append("    <x:Selected/>");
    strb.Append("    <x:Panes>");
    strb.Append("      <x:Pane>");
    strb.Append("      <x:Number>3 </x:Number>");
    strb.Append("      <x:ActiveCol>1 </x:ActiveCol>");
    strb.Append("      </x:Pane>");
    strb.Append("    </x:Panes>");
    strb.Append("    <x:ProtectContents>False </x:ProtectContents>");
    strb.Append("    <x:ProtectObjects>False </x:ProtectObjects>");
    strb.Append("    <x:ProtectScenarios>False </x:ProtectScenarios>");
    strb.Append("    </x:WorksheetOptions>");
    strb.Append("  </x:ExcelWorksheet>");
    strb.Append("  <x:WindowHeight>6750 </x:WindowHeight>");
    strb.Append("  <x:WindowWidth>10620 </x:WindowWidth>");
    strb.Append("  <x:WindowTopX>480 </x:WindowTopX>");
    strb.Append("  <x:WindowTopY>75 </x:WindowTopY>");
    strb.Append("  <x:ProtectStructure>False </x:ProtectStructure>");
    strb.Append("  <x:ProtectWindows>False </x:ProtectWindows>");
    strb.Append(" </x:ExcelWorkbook>");
    strb.Append(" </xml>");
    strb.Append("");
    strb.Append(" </head> <body> <table align="center" style='border-collapse:collapse;table-layout:fixed'> <tr>");

    if (ds.Tables.Count > 0)
    {
    //写列标题 
    if (arrTitle != null && arrTitle.Length > 0)
    {
    foreach (string strCol in arrTitle)
    {
    strb.Append(" <td> <b>" + strCol + " </b> </td>");
    }
    strb.Append(" </tr>");
    }
    else
    {
    int columncount = ds.Tables[0].Columns.Count;
    for (int columi = 0; columi < columncount; columi++)
    {
    strb.Append(" <td> <b>" + ds.Tables[0].Columns[columi] + " </b> </td>");
    }
    strb.Append(" </tr>");
    }

    //写数据    
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
    strb.Append(" <tr>");
    for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
    {
    strb.Append(" <td class='xl26'>" + ds.Tables[0].Rows[i][j].ToString() + " </td>");
    }
    strb.Append(" </tr>");
    }
    }
    strb.Append(" </body> </html>");
    Response.Clear();
    Response.Buffer = true;
    Response.Charset = "GB2312";
    Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ".xls");
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文  
    Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。  
    this.EnableViewState = false;
    Response.Write(strb);
    Response.End();
    }
    #endregion

    //不过为什么导出Excel,单元格是受保护呢!
    //导出word,只要把扩展名 .xls 改成 .doc即可。
    //这个人也是用这个方法:http://wyf.javaeye.com/blog/531171


    ===============以往方法===============
    #region 生成Excel
    /// <summary>
    /// DataSet导出Excel
    /// </summary>
    /// <param name="arrTitle">列标题,若为null,则直接取dataset列标题</param>
    /// <param name="ds">要导出的DataSet</param>
    /// <param name="fileName">Excel文件名,不需要传入扩展名</param>
    protected void CreateExcel(string[] arrTitle, DataSet ds, string fileName)
    {
    HttpResponse resp;
    resp = Page.Response;
    resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
    resp.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ".xls");
    string colHeaders = "", ls_item = "";
    //定义表对象与行对象,同时用DataSet对其值进行初始化
    System.Data.DataTable dt = ds.Tables[0];
    DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
    int i = 0;
    int cl = dt.Columns.Count;

    //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
    if (arrTitle != null && arrTitle.Length > 0)
    {
    for (i = 0; i < arrTitle.Length; i++)
    {
    if (i == (arrTitle.Length - 1))//最后一列,加n
    {
    colHeaders += arrTitle[i] + " ";
    }
    else
    {
    colHeaders +=arrTitle[i] + " ";
    }
    }
    }
    else
    {
    for (i = 0; i < cl; i++)
    {
    if (i == (cl - 1))//最后一列,加n
    {
    colHeaders += dt.Columns[i].Caption.ToString() + " ";
    }
    else
    {
    colHeaders += dt.Columns[i].Caption.ToString() + " ";
    }
    }
    }

    resp.Write(colHeaders);
    //向HTTP输出流中写入取得的数据信息
    //逐行处理数据 
    foreach (DataRow row in myRow)
    {
    //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据   
    for (i = 0; i < cl; i++)
    {
    if (i == (cl - 1))//最后一列,加n
    {
    ls_item += row[i].ToString() + " ";
    }
    else
    {
    ls_item += row[i].ToString() + " ";
    }
    }
    resp.Write(ls_item);
    ls_item = "";

    }
    resp.End();
    }
    #endregion
  • 相关阅读:
    Redis闪退解决办法
    excel导入数据库,存在则更新不存在添加
    sql取逗号前后数据与批量修改某一字段某一值
    sql查询一个字段不同值并返回
    表格加边框
    图论算法-求(有向)图中任意两点间所有路径
    Java实时监控日志文件并输出 转
    ResultSet的记录数  转
    eclipse中显示“编辑器中没有main类型
    压缩
  • 原文地址:https://www.cnblogs.com/handboy/p/7163933.html
Copyright © 2011-2022 走看看