记一次服务器生成Excel在客户端下载的案例

今天加盟部校长说做一个用户数据收集并导出Excel文件的小网页,主要便于查看客户信息,前期一切顺利,就在生成Excel和下载的时候出现了问题,收集了一些资料,有人说用NPOI插件,这个可行,我在网上收集了资料,没有使用插件做了一个简单的Excel生成器,话不多少代码如下:

首先在服务类中

//导出Excel
        /// <summary>
        /// DataTable导出到Excel
        /// </summary>
        /// <param name="table">DataTable类型的数据源</param>
        /// <param name="file">需要导出的文件路径</param>
        public void dataTableToCsv(DataTable table, string file)
        {
            string title = "";
            FileStream fs = new FileStream(file, FileMode.OpenOrCreate);
            StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);
            for (int i = 0; i < table.Columns.Count; i++)
            {
                title += table.Columns[i].ColumnName + "\t"; //栏位:自动跳到下一单元格
            }
            title = title.Substring(0, title.Length - 1) + "\n";
            sw.Write(title);
            foreach (DataRow row in table.Rows)
            {
                string line = "";
                for (int i = 0; i < table.Columns.Count; i++)
                {
                    line += row[i].ToString().Trim() + "\t"; //内容:自动跳到下一单元格
                }
                line = line.Substring(0, line.Length - 1) + "\n";
                sw.Write(line);
            }
            sw.Close();
            fs.Close();
        }

我是用一般处理程序做业务层,其代码如下所示:

string UserName = context.Request["name"].ToString();
                string UserType = context.Request["type"].ToString();

DataSet ds = cs.Get_JQ_Info(UserName, UserType);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    //D:\WebSoft\WebSoft10\SoftWeb\Services\down\2018-09-08 170615.xls
                    string path = context.Server.MapPath("../down/" + DateTime.Now.ToString("yyyy-MM-dd HHmmss") + ".xls");
                    cs.dataTableToCsv(ds.Tables["JG"], path); //调用函数
                    string[] arr = path.Split(‘\\‘);
                    string pp = "";
                    for (int i = 0; i < arr.Length; i++)
                    {
                        if (arr[i].Contains("2018")) {
                            pp = arr[i].ToString();
                        }
                    }

this.downloadfile(context, "../down/"+pp);
                  
               
                    
                    
                }
                else
                {

context.Response.Write("Error");
                }

//文件下载
    public void downloadfile(HttpContext context, string s_fileName)
    {
        string path = s_fileName;
        System.IO.FileInfo file = new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath(path));
       
        context.Response.Clear();
        context.Response.Charset = "UTF-8";
        context.Response.ContentEncoding = System.Text.Encoding.UTF8;
        context.Response.AddHeader("Content-Type", "application/octet-stream");
        // 添加头信息,为"文件下载/另存为"对话框指定默认文件名,设定编码为UTF8,防止中文文件名出现乱码
        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8));
        // 添加头信息,指定文件大小,让浏览器能够显示下载进度
        context.Response.AddHeader("Content-Length", file.Length.ToString());
        //// 指定返回的是一个不能被客户端读取的流,必须被下载
        context.Response.ContentType = "application/ms-excel";
        // 把文件流发送到客户端
        context.Response.WriteFile(file.FullName);
        // 停止页面的执行
        context.Response.End();
    }

特别说明!!!!!!!!!!!!

前端调用千万别用AJAX,无论如何调都不会出现弹框的,这时请使用<a href=""></a>的方式进行下载。

由于浏览器网页关闭了,引用地址无法给出,若是引用了某位大神的代码或者内容,请谅解,再次抱歉。

原文地址:https://www.cnblogs.com/CS521/p/9609893.html

时间: 2024-08-01 17:36:58

记一次服务器生成Excel在客户端下载的案例的相关文章

.net生成Excel,并下载

生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原理都是一致的,只是生成的字符串长相不一致而已.我这里使用的是mvc,所以要下载的话,直接生成一个超链接指向当前这个生成文件的Action,用Ajax好像没办法,但是如果当前这个超链接只是请求一个文件,页面也不会刷新,比如一个按钮点击事件:直接windows.location.href="/contr

FinalShell服务器管理软件,SSH客户端下载,支持Windows,Mac OS X,Linux

FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 用户QQ群 342045988 Windows版下载地址:http://www.hostbuf.com/downloads/finalshell_install.exe Mac版,Linux版安装及教程:http://www.hostbuf.com/t/1059.html FinalShell 服务器加速教程 更新日志:http://www.hostbuf.com/t

【原创】POI 生成Excel文件并下载

ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</versio

C# 生成pdf文件客户端下载

itextsharp.dll 下载:http://sourceforge.net/projects/itextsharp/ 程序需引用:itextsharp.dll,itextsharp.pdfa.dll,PresentationFramework.dll 本人使用的是一般处理程序来写的,废话不多说代码才是硬道理,使用插件定位图片,表格是使用html转的pdf 1 public void ProcessRequest(HttpContext context) 2 { 3 context.Resp

python通过xlwt模块直接在网页上生成excel文件并下载

import xlwt import StringIO import web urls = ( '/rim_request','rim_request', '/rim_export','rim_export', '/(.*)', 'index' ) class rim_export: #render = web.template.render('adsl') def GET(self): web.header('Content-type','application/vnd.ms-excel')

生成 excel 直接用 httpServletResponse 输出

之前写过一篇文章 <超详细的java生成excel文件并下载>,该文章虽然够详细,也行得通,但还是有一定的缺陷,该文章可以拆分成两个部分,一是指定位置生成excel文件,二是根据地址下载文件.缺陷的部分是会产生中间文件,而这个中间文件我们并不需要,如果每次下载的时候都会生成一个这样的文件,那久而久之岂不是浪费空间,而且生成文件之后再读取输出这样也耗时间.所以今天就对之前的文章进行优化处理下. package com.test.demo.controllers; import com.test.

Excel服务器待办事宜提醒客户端程序 [2014.03.19 日更新]

软件可以免费使用,作者仅保留一个版权声明于待办事宜提醒的状态栏处. 适用版本:Excel服务器9.2版及以上版本均支持. 欢迎大家提意见!联系QQ:303629685[Excel服务器待办事宜提醒客户端程序 20140113更新]        1.修复查询语句的小错误.        2.服务器端设置后,自动带出已设置的服务器端除密码外的相关信息.        3.客户端提醒设置后,自动带出已设置的客户端除密码外的相关信息.[Excel服务器待办事宜提醒客户端程序 20140109更新] 

服务器巡检shell脚本,python生成excel文档并邮件发出

背景及思路: 五一小长假之前,公司要求我做一次服务器巡检. 1.写了一个简单的脚本获取服务器的各种基础信息:cpu,内存,swap分区使用情况,磁盘,网卡信息种种,具体见脚本,将这些信息追加到一个文件中,然后在监控机上做一次汇总,汇总方式就不详谈,我用的是for循环ssh追加 2.然后利用python的xlsxwriter模块生成excel 3.最后利用python发带附件为excel的邮件到指定邮箱 获取服务器信息部分脚本: #取所需要的内网IP Int_ip=`ifconfig|awk '/

Java学习之道:Java上传下载excel、解析Excel、生成Excel的问题

在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提供了所需jar包的下载,方便大伙使用,下面言归正传! 1.Excel的下载 1)Action中: 添加响应事件,通过getRealPath获得工程路径,与jsp中获得request.getContextPath()效果相同,fileName为要下载的文件名,经过拼接filePath是xls文件的绝对