怎么将ASP.NET导出Excel表格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么将ASP.NET导出Excel表格相关的知识,希望对你有一定的参考价值。

参考技术A

  之前一直想研究ASP.NET导出 Excel 表格来着,但一直没有时间,这几天因为一个项目的需要,所以就钻研了一下。

  小面我告诉你 怎么将ASP.NET导出Excel表格:

  1.在DownStudent.aspx页面上添加一个Label标签用来显示“请选择要查看数据的条件”静态文本;

  2.在该页面上添加DropDownList控件用来控制显示数据以及输出数据的条件,绑定DropDownList1_SelectedIndexChanged函数;

  3.在该页面上添加GridView控件来显示由DropDownList控件指定条件的数据;

  4.在该页面上添加SqlDataSource控件用来连接数据库并将查询的结果返给GridView控件;

  5.最后是一个确认按钮,绑定Button1_Click函数。

  后台代码实现(DownStudent.aspx.cs):(具体代码见附录)

  后台代码的实现是导出Excel表格的关键所在,是重中之重。

  1.首先是命名空间的问题,因为这里是导出Excel表格用到了输入输出流,所以必须在命名空间里引用IO流(

  using System.IO;),我这里用的是SQLServer数据库,所以还要用到(using System.Data;和using System.Data,Sql;);

  2.实现DropDownList1_SelectedIndexChanged函数,注意:SelectedIndexChanged 方法 的实现必须基于DropDownList1控件的AutoPostBack属性要设置为True(否则SelectedIndexChanged方法无效),而DropDownList1_SelectedIndexChanged函数主要实现的就是根据DropDownList1控件选定的条件修改SqlDataSource控件的SelectComand的值;

  代码示例:SqlDataSource1.SelectCommand = "SELECT [Chufen], [Zhibu], [Zhuanzheng] from bizusers WHERE (bizusers.Zhibu ='" + DropDownList1.SelectedItem.Text + "')";

  3.Button1_Click函数是精华所在,该函数实现思想是:先获取一个数据库连接(方法比较多,有传统通过SqlConnect获取的,也有调用外部类实现的),然后是一条SQL语句(Select查询字符串),再者是调用外部类的方法根据SQL语句生成一个DataSet结果集对象(把SQL语句查询到的值放入DataSet里,方便下一次使用,而不是再去访问一次数据库),最后,调用CreateExcel函数,注意参数;

  4.实现CreateExcel函数(就是对生成的DataSet的进一步操作了);

  其他引用文件说明:

  在App_Code文件夹里主要有3个外部类,QueryString.cs文件这里不是重点,故跳过。1.ExcelExporter.cs文件主要是实现了CreateExcel函数中调用的类,是用来生成Excel文件的,涉及excelXML文件流,只需要会调用该类对DataSet进行处理即可,具体生成Excel表格工作交由它处理;2.SqlData.cs文件主要是封装了连接数据库SqlConnect对象的方法,并且实现了对SqlCommand命令获取到的值的操作,实现了生成DataSet对象以及DataReader对象的方法(该文件主要好处是省去了每次在界面.cs文件中都要调用SqlConnect以及SqlCommand对象的麻烦);(具体代码见附录)

  效果:

  单击“确认导出”按钮;

  选择另存为即可;

asp.net c# 网页 导出excel 多表格 多个sheet

    /// <summary>
    ///可导出多个sheet表
    /// </summary>
    /// <param name="Author">作者</param>
    /// <param name="Company">公司</param>
    /// <param name="dt">多个DataTable</param>
    /// <param name="fileName">文件名</param>
    public static void PushExcelToClientEx(string Author, string Company, DataTable[] dt, string fileName)
    {
        if (!fileName.Contains(".xls"))
        {
            fileName += ".xls";
        }

        StringBuilder sbBody = new StringBuilder();
        StringBuilder sbSheet = new StringBuilder();

        sbBody.AppendFormat(
                "MIME-Version: 1.0\r\n" +
                "X-Document-Type: Workbook\r\n" +
                "Content-Type: multipart/related; boundary=\"-=BOUNDARY_EXCEL\"\r\n\r\n" +
                "---=BOUNDARY_EXCEL\r\n" +
                "Content-Type: text/html; charset=\"gbk\"\r\n\r\n" +
                "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n" +
                "xmlns:x=\"urn:schemas-microsoft-com:office:excel\">\r\n\r\n" +
                "<head>\r\n" +
                "<xml>\r\n" +
                "<o:DocumentProperties>\r\n" +
                "<o:Author>{0}</o:Author>\r\n" +
                "<o:LastAuthor>{0}</o:LastAuthor>\r\n" +
                "<o:Created>{1}</o:Created>\r\n" +
                "<o:LastSaved>{1}</o:LastSaved>\r\n" +
                "<o:Company>{2}</o:Company>\r\n" +
                "<o:Version>11.5606</o:Version>\r\n" +
                "</o:DocumentProperties>\r\n" +
                "</xml>\r\n" +
                "<xml>\r\n" +
                "<x:ExcelWorkbook>\r\n" +
                "<x:ExcelWorksheets>\r\n"
               , Author
               , DateTime.Now.ToString()
               , Company);

        foreach (var d in dt)
        {
            string gid = Guid.NewGuid().ToString();
            sbBody.AppendFormat("<x:ExcelWorksheet>\r\n" +
                "<x:Name>{0}</x:Name>\r\n" +
                "<x:WorksheetSource HRef=\"cid:{1}\"/>\r\n" +
                "</x:ExcelWorksheet>\r\n"
                , d.TableName.Replace(":", "").Replace("\\", "").Replace("/", "").Replace("?", "").Replace("*", "").Replace("[", "").Replace("]", "").Trim()
                , gid);


            sbSheet.AppendFormat(
             "---=BOUNDARY_EXCEL\r\n" +
             "Content-ID: {0}\r\n" +
             "Content-Type: text/html; charset=\"gbk\"\r\n\r\n" +
             "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n" +
             "xmlns:x=\"urn:schemas-microsoft-com:office:excel\">\r\n\r\n" +
             "<head>\r\n" +
             "<xml>\r\n" +
             "<x:WorksheetOptions>\r\n" +
             "<x:ProtectContents>False</x:ProtectContents>\r\n" +
             "<x:ProtectObjects>False</x:ProtectObjects>\r\n" +
             "<x:ProtectScenarios>False</x:ProtectScenarios>\r\n" +
             "</x:WorksheetOptions>\r\n" +
             "</xml>\r\n" +
             "</head>\r\n" +
             "<body>\r\n"
             , gid);

            sbSheet.Append("<table border=‘1‘>");
            sbSheet.Append("<tr style=‘background-color: #CCC;‘>");
            for (int i = 0; i < d.Columns.Count; i++)
            {
                sbSheet.AppendFormat("<td style=‘vnd.ms-excel.numberformat: @;font-weight:bold‘>{0}</td>", d.Columns[i].ColumnName);
            }
            sbSheet.Append("</tr>");
            for (int j = 0; j < d.Rows.Count; j++)
            {
                sbSheet.Append("<tr>");
                for (int k = 0; k < d.Columns.Count; k++)
                {
                    sbSheet.AppendFormat("<td style=‘vnd.ms-excel.numberformat: @;‘>{0}</td>", Convert.ToString(d.Rows[j][k]));
                }
                sbSheet.Append("</tr>");
            }
            sbSheet.Append("</table>");
            sbSheet.Append("</body>\r\n" +
                "</html>\r\n\r\n");
        }

        StringBuilder sb = new StringBuilder(sbBody.ToString());

        sb.Append("</x:ExcelWorksheets>\r\n" +
            "</x:ExcelWorkbook>\r\n" +
           "</xml>\r\n" +
            "</head>\r\n" +
            "</html>\r\n\r\n");

        sb.Append(sbSheet.ToString());

        sb.Append("---=BOUNDARY_EXCEL--");

        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.Buffer = true;

        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
        HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gbk");
        HttpContext.Current.Response.Write(sb.ToString());
        HttpContext.Current.Response.End();
    }

 

以上是关于怎么将ASP.NET导出Excel表格的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 导出EXCEL时如何不把一些不是EXCEL的符号一起导出到EXCEL?

asp.net c# 网页 导出excel 多表格 多个sheet

使用 ASP.NET 将 HTML 表导出到 Excel

ASP.NET从数据库导出到EXCEL

c# asp.net 页面上的多个表导出到一个excel文件中

如何在asp.net mvc中将Webcontrol表导出到excel