之前做过winfrom程序的导出excel文件的功能,感觉非常简单。现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现数据导出excel,在asp.net上完全被它给恶心到了。首先是不能弹出保存对话框,然后又是在代码执行到Microsoft.Office.Interop.Excel.Application myexcel = new Microsoft.Office.Interop.Excel.Application();这一句的时候,莫名其妙的不动了,这个问题在调试的时候没有出现,在发布后才出来了,后来找到一个方法给解决了,就是中配置文件的<system.web>下添加<identity impersonate="true" userName="administrator" password="0"/>,其中的用户名和密码就是本机的用户名和密码。这个问题解决之后,又遇到了令人痛苦的SaveAs保存异常,错误提示是:Exception from HRESULT: 0x800A03EC。在网上找遍了资料,都没能解决问题。不得已,只好尝试其他的导出excel的方案了。

下面的方案才是我最想要的,就简单明了的介绍一下:

首先是建一个web页,里面就一个按钮用来实现导出excel,代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        //Excel DownLoad
        function excelExport() {
//            var hidText = document.getElementById("hidParam");
//            hidText.value = "some params";
            document.getElementById("ExcelOutput").click();
        }
</script> 

</head>
<body>
    <form id="form1" runat="server">
    <input type="button" value="EXCEL下载" style="width:100px;" onclick="excelExport()" id="excelBut" />
<%--<input id="hidParam" type="text" runat="server" style="display:none;"/> --%>
<asp:Button runat="server" ID="ExcelOutput" style="display:none" Text= "EXCEL出力" Width="0px" onclick="btnExcel_Click" UseSubmitBehavior="false"/>
<asp:GridView ID="gvExcel" runat="server" Height="95px" Visible="False"></asp:GridView> 

    </form>
</body>
</html>

其中注释掉部分可以用于向后台代码传递你想要的数据。

后台代码如下:

public partial class WebForm2 : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnExcel_Click(object sender, EventArgs e)
        {
            string strExcelName = "MyExcel.xls";
            strExcelName = strExcelName.Replace(@"/", "");
            DataTable dt = new DataTable();
            DataColumn dc = null;
            dc = dt.Columns.Add("编号", Type.GetType("System.Int32"));
            dc = dt.Columns.Add("产品", Type.GetType("System.String"));
            dc = dt.Columns.Add("版本", Type.GetType("System.String"));
            dc = dt.Columns.Add("描述", Type.GetType("System.String"));

            DataRow dr = dt.NewRow();
            dr[;
            dr["产品"] = "这个地方是单元格的值";
            dr["版本"] = "2.0";
            dr["描述"] = "这个地方是单元格的值";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[;
            dr["产品"] = "这个地方是单元333格的值";
            dr["版本"] = "3.0";
            dr["描述"] = "这个地方是单元格的33值";
            dt.Rows.Add(dr);

            gvExcel.Visible = true;
            gvExcel.DataSource = null;

            gvExcel.DataSource = dt;
            gvExcel.DataBind();

            ExportToExcel(this.Page, gvExcel, strExcelName); 

        }

        public void ExportToExcel(System.Web.UI.Page page, GridView excel, string fileName)
           {
             try
              {
                foreach (GridViewRow row in excel.Rows)
                {
                    ; i < row.Cells.Count; i++)
                        {
                            excel.HeaderRow.Cells[i].BackColor = System.Drawing.Color.Yellow;
                          }
                }
                excel.Font.Size = ;
                excel.AlternatingRowStyle.BackColor = System.Drawing.Color.LightCyan;
                excel.RowStyle.Height = ;
                //page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); //如果出现中文乱码,就用这句
                page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
                page.Response.Charset = "utf-8";
                page.Response.ContentType = "application/vnd.ms-excel";
                page.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
                excel.Page.EnableViewState = false;
                excel.Visible = true;
                excel.HeaderStyle.Reset();
                excel.AlternatingRowStyle.Reset(); 

                System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
                excel.RenderControl(oHtmlTextWriter);
                page.Response.Write(oStringWriter.ToString());
                page.Response.End(); 

                excel.DataSource = null;
                excel.Visible = false;
               }
               catch (Exception e)
               {                 }
             }
                }

这里为了突出介绍的重点,对于数据的获取就没有介绍了。这里面有个问题,就是当程序执行到

excel.RenderControl(oHtmlTextWriter); 这一句的时候,报了个错:控件必须放在具有 runat=server 的窗体标记内,这个只需要重写方法VerifyRenderingInServerForm就是了。
public override void VerifyRenderingInServerForm(Control control)
        {
            // 这个方法必须要的,不然在下面的代码excel.RenderControl(oHtmlTextWriter); 处会报错:控件必须放在具有 runat=server 的窗体标记内
        }

之前我中vs2010 中做这个导出功能的时候是没有遇到这个问题的,但是中vs2013 中却遇到了。

好了,这种方式就介绍完了,它的好处就在于没有哪些乱七八糟的异常,同时也会弹出一个提示框用于选择保存的路径。

 

asp.net 导出excel文件的更多相关文章

  1. ASP.NET导出Excel文件

    第一种最常见,并且最简单的方式,直接把GridView导出,导出格式为文本表格形式. protected void btnSaveExcel_Click(object sender, EventArg ...

  2. ASP.NETCore -----导出Excel文件并下载

    本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...

  3. ASP.NET 导出EXCEL文件处理多对应排列的

    这次项目遇到了一个导出excel需要对应排列的问题.本来在做这个项目之前都基本没做过excel导出的菜鸡,这次强行做还是有些忐忑的,加上那个表的结构比较奇特.    废话不多说,先介绍表结构吧 是数据 ...

  4. ASP.NET 导出excel文件出现乱码的解决办法

    string html =TABLE ;//<table>标签,可以是多张表string modified = Regex.Replace(html, "<table &g ...

  5. 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

    -----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...

  6. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  7. Asp.net导出Excel续章(自定义合并单元格,非Office组件)

    结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置 ...

  8. asp.net导出excel示例代码

    asp.net导出excel的简单方法. excel的操作,最常用的就是导出和导入. 本例使用NPOI实现. 代码:/// <summary> );             ;       ...

  9. [转] Asp.Net 导出 Excel 数据的9种方案

    湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website ...

随机推荐

  1. Python 练习 —— 2048

    1. 引言 2048 这段时间火的不行啊,大家都纷纷仿造,"百家争鸣",于是出现了各种技术版本号:除了手机版本号,还有C语言版.Qt版.Web版.java版.C#版等,刚好我接触P ...

  2. HDU 4735 Little Wish~ lyrical step~(DLX , 反复覆盖)

    解题思路: DLX 的模板题.反复覆盖. #include <stdio.h> #include <string.h> #include <iostream> #i ...

  3. cocos2d-x(quick-lua)读取csv文件

    一.准备一份csv文件 ID,Name,Des,Model ID,名字,描写叙述,图片模型 1,广告,www.benmutou.com,csv.png 2,否认,呵呵,广告什么的,我才不会加,good ...

  4. poj 3894 System Engineer (二分图最大匹配--匈牙利算法)

    System Engineer Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 507   Accepted: 217 Des ...

  5. 【中途相遇+二进制】【NEERC 2003】Jurassic Remains

    例题25  侏罗纪(Jurassic Remains, NEERC 2003, LA 2965) 给定n个大写字母组成的字符串.选择尽量多的串,使得每个大写字母都能出现偶数次. [输入格式] 输入包含 ...

  6. 解决在Linux下安装Oracle时的中文乱码问题

    本帖最后由 TsengYia 于 2012-2-22 17:06 编辑 解决在Linux下安装Oracle时的中文乱码问题 操作系统:Red Hat Enterprise Linux 6.1数据库:O ...

  7. Splash界面布局与代码实现(一)

    xml界面布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns ...

  8. MySql5压缩包安装

    一. 解压所有文件到一个目录:例如D:\Program Files\mysql-5.6.22-winx64 二. 配置系统的环境变量:在Path路径后追加:;D:\Program Files\mysq ...

  9. @Override报错的解决方法

    有时候Java的Eclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多. 这是jdk的问题,@ ...

  10. 切记ajax中要带上AntiForgeryToken防止CSRF攻击

    在程序项目中经常看到ajax post数据到服务器没有加上防伪标记,导致CSRF被攻击,下面小编通过本篇文章给大家介绍ajax中要带上AntiForgeryToken防止CSRF攻击,感兴趣的朋友一起 ...