• .net导出Excel


            protected void btnPrint_Click(object sender, EventArgs e)
            {
                DataTable dt = DbHelperSQL.GetTable("select b.ProNumber as 产品编号,b.Name as 产品名称,b.kucun as 剩余库存,b.Price as 产品价格,a.buynum as 购买数量,(b.price*a.buynum) as 合计金额 from shopcar as a,Product as b where a.Proid=b.id and a.userid=" + Session["UserID"] + "");
                if (dt.Rows.Count == 0)
                {
                    MsgBox.Show(this,"没有数据,导出失败");
                }
                else
                {
                    //导出Excel
                    ExcelImport(dt, "购物车"+DateTime.Now.ToString("yyyyMMddHHmm"));
                }
            }
    
            protected void ExcelImport(DataTable dt, string ExportFileName)
            {
                StringWriter sw = GetStringWriter(dt);
                //当前编码
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                //把输出的文件名进行编码
                string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);
                //文件名
                string str = "attachment;filename=" + fileName + ".xls";
                //把文件头输出,此文件头激活文件下载框
                HttpContext.Current.Response.AppendHeader("Content-Disposition", str);//http报头文件
                HttpContext.Current.Response.ContentType = "application/ms-excel";
                this.Page.EnableViewState = false;
                Response.Write(sw);
                Response.End();
            }
            private StringWriter GetStringWriter(DataTable dt)
            {
                StringWriter sw = new StringWriter();
                //读列名
                foreach (DataColumn dc in dt.Columns)
                    sw.Write(dc.ColumnName + "	");
                //读列值
                //重新的一行
                sw.Write(sw.NewLine);
                if (dt != null)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            sw.Write(dr[i].ToString() + "	");
                        }
                        sw.Write(sw.NewLine);
                    }
                }
                sw.Close();
    
                return sw;
            }

    导出DataTable

     对于大量的数据,导出Excel的方式。
         上篇博客介绍了导出Excel一种方式:通过DataTable
          这篇博客,介绍另一中导出Excel方式-通过DataGrid.
     
          导出Excel的过程:
          虽然这次是通过DataGrid导出Excel,但是不是从界面上DataGrid控件导出Excel。因为这次实际项目中的需求是把查询到的信息导出Excel,界面上的DataGrid控件只显示一部分,也就是正如上篇博客中提到控件实现了分页,所以不可以直接从界面控件导出。
          但是实现的过程一样,只不过,这次DataGrid是动态生成的。
           
          此导出过程用到StringWriter类(将文本信息写入字符串),HtmlTextWriter类:将标记字符和文本写入到 ASP.NET 服务器控件输出流。(命名空间:System.Web.UI)
          Control.RenderControl (HtmlTextWriter) ——将服务器控件的内容输出到所提供的 HtmlTextWriter 对象中。
         然后respose输出StringWriter对象。   

     /// <summary>
        /// 导出Excel
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="ExportFileName"></param>
        protected void ExcelExport(DataTable dt, string ExportFileName)
        {
            DataGrid dgExcel = new DataGrid();
            dgExcel.DataSource = dt;
            dgExcel.DataBind();
    
            HttpContext.Current.Response.Charset = "GB2312";
            string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);
            string str="attachment;filename="+fileName+".xls";
            HttpContext .Current .Response .ContentEncoding =System.Text.Encoding .UTF7;
            HttpContext.Current.Response .ContentType ="application/ms-excel";
            HttpContext .Current .Response .AppendHeader ("content-disposition",str);
    
             StringWriter sw = new StringWriter();
            HtmlTextWriter htmTextWriter = new HtmlTextWriter(sw);
            dgExcel .RenderControl(htmTextWriter );
            Response .Write(sw);
            Response .End();
    
        }
    /// <summary>
        /// 导出excel按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnExport_Click(object sender, EventArgs e)
        {
            DataTable dt = new SelectClassRoomManager().SelectClassRoomByTypeBuildNo(ddlClassType.SelectedValue, ddlBuildingID.SelectedValue);
            if (dt.Rows.Count == 0)
                Response.Write("<script>alert('没有数据,没有必要导出啊哈');</script>");
            else
            {
                
                //导出excel
                ExcelExport(dt, "教室");
            }
        }

    其中用DataGrid导出Excel的时候,其导出的文件名编码:

        string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);

        其导出的当前文件编码:

          HttpContext .Current .Response .ContentEncoding =System.Text.Encoding .UTF7;

       但是这两种导出的Excel的文件不同,内容是一样的,但是其格式不同,使用上篇博客DataTable导出Excel,是真正的excel,而使用DataGrid导出的Excel,貌似有点类似记事本。还是贴的图,大家看看吧。

         DataTable导出的Excel 如下:

     原博地址 

    http://blog.csdn.net/yuebinghaoyuan/article/details/6703044

  • 相关阅读:
    ckeditor(在线文本编辑器)使用教程
    一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
    正则表达式
    关于padding与margin的区别
    伪类link,hover,active,visited,focus的区别
    运动框架
    scroll、offset和client的区别
    如何给Sublime安装插件
    获取行间样式与在js中设置样式
    寻找下一个同级元素节点
  • 原文地址:https://www.cnblogs.com/wanggc/p/4598706.html
Copyright © 2020-2023  润新知