asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

时间:2020-12-14 19:13:14
asp.net导出的excel文件 显示下载页面时只闪了一下 代码

           Response.Charset = "utf-8";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("帐户往来汇总表.xls", System.Text.Encoding.UTF8).ToString());
            Response.ContentType = "application/ms-excel";

            //将表格内容作为Excel输出   
            this.EnableViewState = false;
            StringWriter tw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            GetTable(Table1);
            this.Table1.RenderControl(hw);
            System.Text.StringBuilder sbContent = new System.Text.StringBuilder();
            sbContent.Append("<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n</head>\r\n<body>\r\n");
            sbContent.Append(tw.ToString());
            sbContent.Append("</body></html>");
            Response.Write(sbContent.ToString());
            Response.End();

15 个解决方案

#1


IE拦截了

#2


那怎么办 该怎么解决

#3


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊
利用Html方式导出Excel很通用,但是你的方法太简单了,导出的时候页面不好看,更要注意的是导出图片的时候就不行了,我建议你最好用Com组件导出Excel,当然如果只是文字数据就无所谓了。
再就是你说下载页面时只闪了一下,意思是弹出了 文件下载对话框,很快就自动关闭了?要是那样,肯定是浏览器设置的原因,可能像楼上说的被拦截了,或者其它的。
给你一个我写的Html导出Excel的方法,你可以修改下:
        /// <summary>
        /// 将控件中内容导出到Excel中
         /// </summary>
        /// <param name="ctr">控件名称</param>
        /// <param name="stylestring">样式列表</param>
        public static void ExportToExcel(System.Web.UI.Control ctr,string stylestring)
        {
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls");
            HttpContext.Current.Response.Charset = "";
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
            HttpContext.Current.Response.ContentType = "application/ms-excel/ms-word";
            ctr.Page.EnableViewState = true;
            System.IO.StringWriter tw = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
            ctr.RenderControl(hw);
            HttpContext.Current.Response.Write(string.Format(@"<html xmlns:x='urn:schemas-microsoft-com:office:excel'><head>
            <!--[if gte mso 9]>
            <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>工作表1</x:Name>
                        <x:WorksheetOptions>
                            <x:Print>
                                <x:ValidPrinterInfo />
                                <x:PaperSizeIndex>9</x:PaperSizeIndex>
                            </x:Print>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
            </xml>
            <![endif]-->
            <meta http-equiv='Content-Type' content='text/html; charset=gb2312'>{0}</head><body>", stylestring));
            HttpContext.Current.Response.Write(tw.ToString());
            HttpContext.Current.Response.Write("</body></html>");
            System.Web.HttpContext.Current.Response.End();
        }
调用方法
string stylestring = @"<style>.tddetailaa{font-size:10pt;}
                                    @page
                                         {margin:.98in .2in .98in .2in;
                                      mso-header-margin:.51in;
                                      mso-footer-margin:.51in;}
                                    br
                                      {mso-data-placement:same-cell;}
                                 </style>";
ExportToExcel(control, stylestring);//control就是你要导出数据的控件,stylestring是样式表

#4


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊
如果你想考虑一下利用Com组件导出Excel的话,我这有写好的直接可以用的方法。

#5


建议使用NPOI组件,很好用的!目前做的项目都是用的NPOI

#6


我第一次做这个东西, asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊要把这个图片导入到excel中,要实现点击页面按钮显示这一种 asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#7


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#8


把Response.End();注释后就可以

#9


引用 6 楼 youdianbenle 的回复:
我第一次做这个东西,要把这个图片导入到excel中,要实现点击页面按钮显示这一种

要导出里面带图片的话,就用Com组件导出Excel的形式,你从网上搜下有一些这方面的介绍,我在给你发一份我自己的方法。
先添加相关的引用,直接在 添加引用里就能找到这些dll:

//导入Com组件
using Microsoft.Office.Core;
//添加引用
using Excel = Microsoft.Office.Interop.Excel;

导出方法:
    
    #region ExportData
    /// <summary>
    /// 导出数据到Excel(包括图片)
    /// </summary>
    private void ExportData()
    {
        object missing = System.Reflection.Missing.Value;
        // 定义一个Excel应用程序
        Excel.Application excel = new Excel.Application();
        if (excel == null)
        {
            return;
        }
        Excel.Workbooks workbooks = excel.Workbooks;
        Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
        Excel.Range range = null;
        worksheet.Cells[1, 1] = "导出的Excel数据"; //标题
        range = (Excel.Range)worksheet.Cells[1, 1];
        range.Font.Bold = true;// 字体加粗
        range.Font.Size = 18; // 设置字体大小
        //range.Interior.Color = 160; // 根据索引设置颜色
        range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;// 设置文本居中 
        range = (Excel.Range)worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 13]);// 选择区域(标题区域)
        range.Select();// 选中区域
        range.Merge(false);// 合并单元格
        range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;

        // 添加图片
        range = (Excel.Range)worksheet.get_Range("A20", missing);// 获取区域
        range.Select();// 选中区域
        // 声明一个Pictures对象,用来保存图片
        Excel.Pictures pics = (Excel.Pictures)worksheet.Pictures(missing);
        // 插入图片
        pics.Insert(Server.MapPath("Images/Excel图片.jpg"), missing);// 在选中区域插入图片

        // 输出表头
        worksheet.Cells[3, 1] = "列名称1";
        worksheet.Cells[3, 2] = "列名称2";
        worksheet.Cells[3, 3] = "列名称3";
        worksheet.Cells[3, 4] = "列名称4";
        worksheet.Cells[3, 5] = "列名称5";
        worksheet.Cells[3, 6] = "列名称6";
        worksheet.Cells[3, 7] = "列名称7";
        worksheet.Cells[3, 8] = "列名称8";
        worksheet.Cells[3, 9] = "列名称9";
        worksheet.Cells[3, 10] = "列名称10";
        worksheet.Cells[3, 11] = "列名称11";
        worksheet.Cells[3, 12] = "列名称12";
        worksheet.Cells[3, 13] = "列名称13";
        // 输出内容 
         //int flag = 3;
        //foreach (var w in list)
        //{
        //    flag += 1;
        //    worksheet.Cells[flag, 1] = w.One;
        //    worksheet.Cells[flag, 2] = w.Two;
        //    worksheet.Cells[flag, 3] = w.Three;
        //    worksheet.Cells[flag, 4] = w.Four;
        //    worksheet.Cells[flag, 5] = w.Five;
        //    worksheet.Cells[flag, 6] = w.Six;
        //    worksheet.Cells[flag, 7] = w.Seven;
        //    worksheet.Cells[flag, 8] = w.Eight;
        //    worksheet.Cells[flag, 9] = w.Nine;
        //    worksheet.Cells[flag, 10] = w.Ten;
        //    worksheet.Cells[flag, 11] = w.Eleven;
        //    worksheet.Cells[flag, 12] = w.Twelve;
        //    worksheet.Cells[flag, 13] = w.Thirteen;
        //}
        string fileName = DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".xls";
        string filePath = Server.MapPath("Files/") + fileName;
        try
        {
            workbook.Saved = true;
            workbook.SaveCopyAs(filePath);
        }
        catch (Exception ex)
        {
            throw (ex);
        }

        // 必须关闭释放所引用的COM对象,关闭Excel进程,否则会占用服务器资源
        System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
        workbook.Close(false, false, missing);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
        workbooks.Close();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
        excel.Quit();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
        // 强制垃圾回收
        System.GC.Collect();
        System.GC.WaitForPendingFinalizers();

        // 提供下载 
        System.IO.FileInfo file = new System.IO.FileInfo(filePath);
        if (file.Exists)
        {
            System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            file.Delete();

            Response.Clear();
            Response.Charset = "UTF-8";
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));
            // 指定文件类型
            Response.ContentType = "Application/ms-excel";
            // 把文件流发送到客户端
            Response.OutputStream.Write(buffer, 0, buffer.Length);
            Response.Flush();
            // 停止该页的执行
            Response.End();
        }
        else
        {
            Response.Write("<script>alert('文件不存在!')</script>");
            Response.End();
        }
    }
    #endregion

里面的 输出内容,自己绑定要读取的数据就行。

#10


引用 8 楼 youdianbenle 的回复:
把Response.End();注释后就可以

你注释了终止页的执行,你也没有指定导出内容的Length,那样页面的一些其它的内容不也就导出来了0 0,晕! asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#11


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊
最起码要加这句Response.AddHeader("Content-Length", file.Length.ToString());指定一下输出内容的长度。我弱弱的感觉,你对导出Excel方式的原理不够理解,不会从网上找了一个方法自己没研究一下就改改用的吧!
asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#12


是啊 就是在网上搜的方法 

#13


引用 12 楼 youdianbenle 的回复:
是啊 就是在网上搜的方法

下次使用的时候最好自己也研究一下,起码把一些基本原理搞明白了,这对你帮助会很大的。
弱弱的问句!可以结贴给分了吧!我都分享给你这么多了!
asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#14


好的  谢谢

#15


引用 14 楼 youdianbenle 的回复:
好的 谢谢

客气了~~大家一起成长 asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#1


IE拦截了

#2


那怎么办 该怎么解决

#3


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊
利用Html方式导出Excel很通用,但是你的方法太简单了,导出的时候页面不好看,更要注意的是导出图片的时候就不行了,我建议你最好用Com组件导出Excel,当然如果只是文字数据就无所谓了。
再就是你说下载页面时只闪了一下,意思是弹出了 文件下载对话框,很快就自动关闭了?要是那样,肯定是浏览器设置的原因,可能像楼上说的被拦截了,或者其它的。
给你一个我写的Html导出Excel的方法,你可以修改下:
        /// <summary>
        /// 将控件中内容导出到Excel中
         /// </summary>
        /// <param name="ctr">控件名称</param>
        /// <param name="stylestring">样式列表</param>
        public static void ExportToExcel(System.Web.UI.Control ctr,string stylestring)
        {
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls");
            HttpContext.Current.Response.Charset = "";
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
            HttpContext.Current.Response.ContentType = "application/ms-excel/ms-word";
            ctr.Page.EnableViewState = true;
            System.IO.StringWriter tw = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
            ctr.RenderControl(hw);
            HttpContext.Current.Response.Write(string.Format(@"<html xmlns:x='urn:schemas-microsoft-com:office:excel'><head>
            <!--[if gte mso 9]>
            <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>工作表1</x:Name>
                        <x:WorksheetOptions>
                            <x:Print>
                                <x:ValidPrinterInfo />
                                <x:PaperSizeIndex>9</x:PaperSizeIndex>
                            </x:Print>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
            </xml>
            <![endif]-->
            <meta http-equiv='Content-Type' content='text/html; charset=gb2312'>{0}</head><body>", stylestring));
            HttpContext.Current.Response.Write(tw.ToString());
            HttpContext.Current.Response.Write("</body></html>");
            System.Web.HttpContext.Current.Response.End();
        }
调用方法
string stylestring = @"<style>.tddetailaa{font-size:10pt;}
                                    @page
                                         {margin:.98in .2in .98in .2in;
                                      mso-header-margin:.51in;
                                      mso-footer-margin:.51in;}
                                    br
                                      {mso-data-placement:same-cell;}
                                 </style>";
ExportToExcel(control, stylestring);//control就是你要导出数据的控件,stylestring是样式表

#4


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊
如果你想考虑一下利用Com组件导出Excel的话,我这有写好的直接可以用的方法。

#5


建议使用NPOI组件,很好用的!目前做的项目都是用的NPOI

#6


我第一次做这个东西, asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊要把这个图片导入到excel中,要实现点击页面按钮显示这一种 asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#7


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#8


把Response.End();注释后就可以

#9


引用 6 楼 youdianbenle 的回复:
我第一次做这个东西,要把这个图片导入到excel中,要实现点击页面按钮显示这一种

要导出里面带图片的话,就用Com组件导出Excel的形式,你从网上搜下有一些这方面的介绍,我在给你发一份我自己的方法。
先添加相关的引用,直接在 添加引用里就能找到这些dll:

//导入Com组件
using Microsoft.Office.Core;
//添加引用
using Excel = Microsoft.Office.Interop.Excel;

导出方法:
    
    #region ExportData
    /// <summary>
    /// 导出数据到Excel(包括图片)
    /// </summary>
    private void ExportData()
    {
        object missing = System.Reflection.Missing.Value;
        // 定义一个Excel应用程序
        Excel.Application excel = new Excel.Application();
        if (excel == null)
        {
            return;
        }
        Excel.Workbooks workbooks = excel.Workbooks;
        Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
        Excel.Range range = null;
        worksheet.Cells[1, 1] = "导出的Excel数据"; //标题
        range = (Excel.Range)worksheet.Cells[1, 1];
        range.Font.Bold = true;// 字体加粗
        range.Font.Size = 18; // 设置字体大小
        //range.Interior.Color = 160; // 根据索引设置颜色
        range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;// 设置文本居中 
        range = (Excel.Range)worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 13]);// 选择区域(标题区域)
        range.Select();// 选中区域
        range.Merge(false);// 合并单元格
        range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;

        // 添加图片
        range = (Excel.Range)worksheet.get_Range("A20", missing);// 获取区域
        range.Select();// 选中区域
        // 声明一个Pictures对象,用来保存图片
        Excel.Pictures pics = (Excel.Pictures)worksheet.Pictures(missing);
        // 插入图片
        pics.Insert(Server.MapPath("Images/Excel图片.jpg"), missing);// 在选中区域插入图片

        // 输出表头
        worksheet.Cells[3, 1] = "列名称1";
        worksheet.Cells[3, 2] = "列名称2";
        worksheet.Cells[3, 3] = "列名称3";
        worksheet.Cells[3, 4] = "列名称4";
        worksheet.Cells[3, 5] = "列名称5";
        worksheet.Cells[3, 6] = "列名称6";
        worksheet.Cells[3, 7] = "列名称7";
        worksheet.Cells[3, 8] = "列名称8";
        worksheet.Cells[3, 9] = "列名称9";
        worksheet.Cells[3, 10] = "列名称10";
        worksheet.Cells[3, 11] = "列名称11";
        worksheet.Cells[3, 12] = "列名称12";
        worksheet.Cells[3, 13] = "列名称13";
        // 输出内容 
         //int flag = 3;
        //foreach (var w in list)
        //{
        //    flag += 1;
        //    worksheet.Cells[flag, 1] = w.One;
        //    worksheet.Cells[flag, 2] = w.Two;
        //    worksheet.Cells[flag, 3] = w.Three;
        //    worksheet.Cells[flag, 4] = w.Four;
        //    worksheet.Cells[flag, 5] = w.Five;
        //    worksheet.Cells[flag, 6] = w.Six;
        //    worksheet.Cells[flag, 7] = w.Seven;
        //    worksheet.Cells[flag, 8] = w.Eight;
        //    worksheet.Cells[flag, 9] = w.Nine;
        //    worksheet.Cells[flag, 10] = w.Ten;
        //    worksheet.Cells[flag, 11] = w.Eleven;
        //    worksheet.Cells[flag, 12] = w.Twelve;
        //    worksheet.Cells[flag, 13] = w.Thirteen;
        //}
        string fileName = DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".xls";
        string filePath = Server.MapPath("Files/") + fileName;
        try
        {
            workbook.Saved = true;
            workbook.SaveCopyAs(filePath);
        }
        catch (Exception ex)
        {
            throw (ex);
        }

        // 必须关闭释放所引用的COM对象,关闭Excel进程,否则会占用服务器资源
        System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
        workbook.Close(false, false, missing);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
        workbooks.Close();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
        excel.Quit();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
        // 强制垃圾回收
        System.GC.Collect();
        System.GC.WaitForPendingFinalizers();

        // 提供下载 
        System.IO.FileInfo file = new System.IO.FileInfo(filePath);
        if (file.Exists)
        {
            System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            file.Delete();

            Response.Clear();
            Response.Charset = "UTF-8";
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));
            // 指定文件类型
            Response.ContentType = "Application/ms-excel";
            // 把文件流发送到客户端
            Response.OutputStream.Write(buffer, 0, buffer.Length);
            Response.Flush();
            // 停止该页的执行
            Response.End();
        }
        else
        {
            Response.Write("<script>alert('文件不存在!')</script>");
            Response.End();
        }
    }
    #endregion

里面的 输出内容,自己绑定要读取的数据就行。

#10


引用 8 楼 youdianbenle 的回复:
把Response.End();注释后就可以

你注释了终止页的执行,你也没有指定导出内容的Length,那样页面的一些其它的内容不也就导出来了0 0,晕! asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#11


asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊
最起码要加这句Response.AddHeader("Content-Length", file.Length.ToString());指定一下输出内容的长度。我弱弱的感觉,你对导出Excel方式的原理不够理解,不会从网上找了一个方法自己没研究一下就改改用的吧!
asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#12


是啊 就是在网上搜的方法 

#13


引用 12 楼 youdianbenle 的回复:
是啊 就是在网上搜的方法

下次使用的时候最好自己也研究一下,起码把一些基本原理搞明白了,这对你帮助会很大的。
弱弱的问句!可以结贴给分了吧!我都分享给你这么多了!
asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊

#14


好的  谢谢

#15


引用 14 楼 youdianbenle 的回复:
好的 谢谢

客气了~~大家一起成长 asp.net导出的excel文件 显示下载页面时只闪了一下 怎么办啊啊啊啊