asp.net后台导出excel的方法一:使用response导出excel

方法一:带StringBuilder 方法的导出

该方法是将所有的数据通过html的形式写入到StringBuilder 中,然后通过response导出。

熟悉html格式的人可以改变成各种格式。

List<U> objList = new List<U>();
         objList = BLL.GetInfo();//读取数据                     

          StringBuilder sb = new StringBuilder();
          sb.Append("<style type=\"text/css\">");
          sb.Append("<!--");
          sb.Append(".text");
          sb.Append("{mso-style-parent:style0;");
          sb.Append("font-size:10.0pt;");
          sb.Append("font-family:\"Arial Unicode MS\", sans-serif;");
          sb.Append("mso-font-charset:0;");
          sb.Append(@"mso-number-format:\@;");
          sb.Append("text-align:center;");
          sb.Append("border:.5pt solid black;");
          sb.Append("white-space:normal;}");
          sb.Append("-->");
          sb.Append("</style>");
          sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
          sb.Append("<tr align=\"Center\" style=\"font-weight:bold;\">");
          sb.Append("<td>ID</td><td>用户名</td><td>真实姓名</td><td>省份</td><td>注册时间</td");
          sb.Append("</tr>");
          foreach (U item in objList)
          {
              sb.Append("<tr align=\"Center\"><td>" + item.id + "</td><td>" + item.uName + "</td><td>" + item.rName + "</td><td>" + item.proId + "</td><td>" + item.regDate + "</td></tr>");
          }
          sb.Append("</table>");

          System.Web.HttpContext.Current.Response.Clear();
          System.Web.HttpContext.Current.Response.Charset = "GB2312";
          // System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
          // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
          System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=myU.xls");
          // 添加头信息,指定文件大小,让浏览器能够显示下载进度
          // System.Web.HttpContext.Current.Response.AddHeader("Content-Length",sb.ToString());

          // 指定返回的是一个不能被客户端读取的流,必须被下载
          System.Web.HttpContext.Current.Response.ContentType = "application/ms-excel";

          // 把文件流发送到客户端
          System.Web.HttpContext.Current.Response.Write(sb.ToString());
          // 停止页面的执行

          System.Web.HttpContext.Current.Response.End();    

方法二:带StringWriter的导出方法

该方法的格式不容易改变 方法与上面原理相同是将数据写入到StringWriter 中 让后到导出

众所周知,Respone.Write()是输出Html流程序给用户的。考虑到一个标准的Web页面的是有多种呈现方式的,
例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 这是以标准网页形式输出Html流

<meta http-equiv="Content-Type" content="application/vnd.ms-excel">
<meta http-equiv="Content-Disposition" content="attachment; filename=ex.xls">这是以附件形式输出Html流,而且是将“数据”存放在ex.xls这个表格中。^_^

那么我们以编码的形式如何显示^_^(现在写VB了,给出的也是VB的事例)
1 Dim _DataStringWriter As StringWriter = New StringWriter 定义一个StringWriter对象
2 _DataStringWriter.WiteLine("FirstFieldName" + ControlChars.Tab + "SecondFieldName")给输出的Excel表格每  列加入名称
3 从数据“容器”里面将数据取出。例如
   Dim dt as New DataTable
   For i as Integer = 0 To dt.Rows.Count - 1 Then
   _DataStringWriter.WiteLine(dt(i)(0) + ControlChars.Tab + dt(i)(1))
   Next
4 Response.AddHeader("Content-Disposition", "attachment; filename=" & fileName)
   Response.ContentType = "application/vnd.ms-excel"
   Response.ContentEncoding = System.Text.Encoding.Unicode
5 Response.Write(_DataStringWriter) 输出Html流
   Response.End()
以上已经可以实现将数据导入到Excel表格,如果需要导入Word则Response.ContentType = "application/vnd.ms-excel"中改为Response.ContentType = "application/vnd.ms-word"即可。但是注意将fileName也应随之改变,XX.xls或者XX.doc

方法三:datatable导出

该方法是response一行一行导出的,你可以根据自己的需求添加相应的行。

/// <summary>
    /// DataTable中的数据导出到Excel并下载
    /// </summary>
    /// <param name="dt">要导出的DataTable</param>
    /// <param name="FileType">类型</param>
    /// <param name="FileName">Excel的文件名</param>
    public void CreateExcel(DataTable dt, string FileType, string FileName)
    {
        Response.Clear();
        Response.Charset = "UTF-8";
        Response.Buffer = true;
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls\"");
        Response.ContentType = FileType;

        string colHeaders = string.Empty;
        string ls_item = string.Empty;
        DataRow[] myRow = dt.Select();
        int i = 0;
        int cl = dt.Columns.Count;
        foreach (DataRow row in myRow)
        {
            for (i = 0; i < cl; i++)
            {
                if (i == (cl - 1))
                {//到头换行
                    ls_item += row[i].ToString() + "\n";
                }
                else
                {//换格
                    ls_item += row[i].ToString() + "\t";
                }
            }
            //一行一行的写入
            Response.Output.Write(ls_item);
            ls_item = string.Empty;
        }

        Response.Output.Flush();
        Response.End();
    }
时间: 2024-12-15 07:05:04

asp.net后台导出excel的方法一:使用response导出excel的相关文章

C# 将内存中的datatable数据导出为Excel(方法一,以文件流方式导出)【转载】

上次做了以Excel文件为数据源,进行数据导入,今天,给大家分享一下如何将内存中的datatable以文件流的方式导出为Excel文件,而且个人觉得这个方法非常不错,高效,简单. 技术要点:1.创建文件流,用于写最终的文件StreamWriter sw = new StreamWriter(fileName, false,Encoding.GetEncoding("gb2312")); 2.使用  StringBuilder类把数据组合为长字符串插入到excel文件中,sb.Appen

asp.net后台导出excel的方法:使用response导出excel

完整程序: 一:调用方法:CreateExcel(newDt, "application/ms-excel", "FileName"); /// <summary> /// DataTable中的数据导出到Excel并下载 /// </summary> /// <param name="dt">要导出的DataTable</param> /// <param name="FileTy

Js调用asp.net后台代码

方法一:         1.首先建立一个按钮,在后台将调用或处理的内容写入button_click中; 2.在前台写一个js函数,内容为document.getElementById("btn1").click() 或者document.getElementById("btn1").onclick() 3.在前台或后台调用js函数,激发click事件,等于访问后台c#函数: 方法一:直接使用<%=%>调用 前台方法: <script type=&

ASP.NET后台自定义导出Excel

关于导出,属于老生常谈了,下面就总结下我自己遇到的一些导出吧. 1.使用Excel组件进行导出(需要安装Microsoft Office Excel). 下面为代码,希望可以帮助别人. 1)准备数据源 //首先创建一个DataTable DataTable dtSource = new DataTable(); dtSource.Columns.Add("ID"); dtSource.Columns.Add("Name"); dtSource.Columns.Add

在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)

前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 3.POI读取Excel有两种格式一个是HSSF,另一个是XSSF. HSSF和XSSF的区别如下: HSSF

[转][ASP.net]后台页面刷新

三种后台刷新页面的方法: // 刷新方法一 Response.AddHeader("Refresh", "0"); // 刷新方法二 Response.Write("<script language=javascript>window.location.href=document.URL;</script>"); // 刷新方法三 Response.Redirect(Request.Url.ToString()); ASP

ASP.net后台弹出消息对话框的方法!【转】

在winform后台,我们通过MessageBox.show(“消息")的方式来返回后台信息,在webform后台,我们通过Response.write(”消息")来返回后台消息,但这样需要将消息值以字符串形式显示到前台页面,是否有类似于MessageBox.show("消息")的方式弹出信息呢.我们会很快想到javascript的alert方法.通过在后台调用js来实现alert的调用.用法为:Response.write("<script>

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(object sender, EventArgs e) { OpenFileDialog fd = new OpenFileDialog();//首先根据打开文件对话框,选择excel表格 ofd.Filter = "表格|*.xls";//打开文件对话框筛选器 string strPath;/