之前做过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. 兼容各个浏览器的H.264播放: H.264+HTML5+FLOWPLAYER+WOWZA+RMTP

    一.方案确定 计划做视频播放,要求可以播放H264编码的mp4文件,各个浏览器,各种终端都能播放. 首先查找可行性方案, http://www.cnblogs.com/sink_cup/archive ...

  2. java的System.getProperty()方法能够获取的值

    java.version Java 执行时环境版本号 java.vendor Java 执行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装 ...

  3. Mac神器Iterm2的Shell Integration的用法和注意事项

    在iterm2 v3.0版本中有了个新的feature——Shell Integration,其中比较重要的功能就是可以取代传统的“rz”.“sz”(即:向服务器上传.下载文件) 具体的用法可以参见官 ...

  4. 【计算几何初步-线段相交+并查集】【HDU1558】Segment set

    Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. Unhandled event loop exception 解决办法

    网上搜索了一下.对其他人有效的办法有两种: 1. 安装了adsafe  .卸载掉就可以了. 2.安装了流氓软件:百度杀毒. 卸载掉也解决问题了 我就是第三种情况.到现在还没解决的热.!. 谁还有更好的 ...

  6. css权重计算

    第一等:代表内联样式,如: style=””,权值为1000.    第二等:代表ID选择器,如:#content,权值为100.    第三等:代表类,伪类和属性选择器,如.content,权值为1 ...

  7. ios9基础知识(UI)总结

    UIWindow.UILabel.UIColor.UIScreen.UIViewController.UIView.UIControl.UIButton.IBOutlet.IBAction.UISte ...

  8. Windows Server 2008 R2 IIS重装

    背景描述: 在一个刚睡醒午觉后的下午,忽然收到客户反馈,说昨天开始应用特别卡,各种卡各种不好用,忽然想到上次说要优化服务器IIS配置还一直没弄,然后迷迷糊糊的就开始进行客户现场服务器IIS配置优化,涉 ...

  9. 【转】VS2010中文注释带红色下划线的解决方法

    转载自:http://blog.csdn.net/whatday/article/details/7856323 环境:Visual Studio 2010 问题:代码中出现中文后会带下划线,很多时候 ...

  10. const的一些总结

    const的一些总结 采用const符号常量写出来的代码更容易维护,有些函数只读不写: 1 常变量: const 类型说明符 变量名 2 常引用: const 类型说明符 &变量名 3 常成员 ...