博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不生成Excel文件,将Datatable数据 Response.write 输出生成Excel (转载)
阅读量:4700 次
发布时间:2019-06-09

本文共 3053 字,大约阅读时间需要 10 分钟。

不生成Excel,将Datatable Response.write 输出生成Excel

 

usg System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.Controls;
using System.Text;

namespace ExeclSaveAS
{


    public partial class _Default : System.Web.UI.
    {

        //输出到Excel,并显示正确。但是会有信息。不知哪位有无办法?
        protected void Page_Load(object sender, EventArgs e)
        {

            //ShowExecl();//提示三次

            DataTable1Excel();//只提示
        }

        private void ShowExecl()
        {


            DataTable dt = GetDataSource();
            Response.Charset = "-8";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.endHeader("Content-Disposition", "attachment;filename=ccc_mys.xls");
            Response.ContentType = "application/ms-excel";
            string colHeaders = "", ls_item = "";
            //表对象与行对象,同时用DataSet对其值进行初始化 
            DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的 
            int i = 0;
            int cl = dt.Columns.Count;

            //取得数据表各列,各标题之间以t分割,最后一个列标题后加回车符 
             (i = 0; i < cl; i++)
            {


                if (i == (cl - 1))//最后一列,加n 
                {

                    colHeaders += dt.Columns[i].Caption.ToString() + "\n";
                }
                else
                {

                    colHeaders += dt.Columns[i].Caption.ToString() + "\t";
                }

            }
            // resp.Write(colHeaders); 
            Response.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() + "\n";
                    }
                    else
                    {

                        ls_item += row[i].ToString() + "\t";
                    }

                }
                Response.Write(ls_item);
                ls_item = "";

            } 
            Response.Flush();
            Response.End(); 
        }

        /// <summary>
        /// 数据源(这里给的数据源是一个Datatable )
        /// </summary>
        /// <returns></returns>
        private DataTable GetDataSource()
        {


            DataTable newdata = new DataTable();
            newdata.Columns.Add("ID");
            newdata.Columns.Add("Name");
            
            object [] OneRowValue=new object []{"1","AAAA"};
            object[] TwoRowValue = new object[] { "2", "BBBBB" };
            
            newdata.Rows.Add(OneRowValue);
            newdata.Rows.Add(TwoRowValue);

            return newdata;
        }


        /// <summary>
        /// 只提示一次
        /// </summary>
        public void DataTable1Excel()
        {


           DataTable dtData = GetDataSource();

            System.Web.UI.WebControls.GridView gvExport = null;
            
            // 当前对话 
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            
            // IO用于导出并返回excel文件 
            System.IO.StringWriter strWriter = null;
            System.Web.UI.HtmlTextWriter htmlWriter = null;

            if (dtData != null)
            {


                // 设置编码和附件格式 
                curContext.Response.ContentType = "application/vnd.ms-excel";
                curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
                curContext.Response.Charset = "utf-8";

                // 导出excel文件 
                strWriter = new System.IO.StringWriter();
                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
                // 为了解决gvData中可能进行了分页的情况,需要重新定义一个无分页的GridView 
                gvExport = new System.Web.UI.WebControls.GridView();

                gvExport.DataSource = dtData.DefaultView;
                gvExport.Paging = true;
                gvExport.DataBind();

                // 返回 
                gvExport.RenderControl(htmlWriter);
                curContext.Response.Write("< http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + strWriter.ToString());
                curContext.Response.End();
            }
        }
    }

}

转载于:https://www.cnblogs.com/q149072205/archive/2012/09/12/2681020.html

你可能感兴趣的文章
Python中单线程、多线程和多进程的效率对比实验
查看>>
js作用域的一道题的思考
查看>>
Python 线程同步锁, 信号量
查看>>
P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here
查看>>
Centos 05 系统目录讲解
查看>>
几个多项式的题
查看>>
大爆炸(Big Bang)
查看>>
iOS 按frame截取部分图像
查看>>
Python之XML解析详解
查看>>
上周热点回顾(8.28-9.3)
查看>>
(菜鸟要飞系列)四,基于Asp.Net MVC5的后台管理系统(zTree绑定Json数据生成树)...
查看>>
JQuery判断数组中是否包含某个元素$.inArray("元素字符串", 数组名称);
查看>>
Gitlab 赋予某台机器git clone的权限 Deploy key
查看>>
python paramiko的使用介绍
查看>>
Python面试综合--DB相关
查看>>
jQuery实现列表框双向选择操作
查看>>
iOS 音频开发之CoreAudio
查看>>
java内部类
查看>>
禁止网页右键和复制,ctrl+a都不行。取消页面默认事件【全】。
查看>>
团队项目冲刺第九天
查看>>