`

导出报表Content-Disposition

 
阅读更多

论坛有个需求,导出参加活动的人数情况,用报表来保存,详细代码如下:

@RequestMapping(value = "/activity/export")
    @ResponseBody
    public String export(HttpServletRequest request, HttpServletResponse response) {

        long tid = NumberUtils.toLong(request.getParameter("tid"), 0l);

        Topic topic = topicService.findTopic(tid);

        Activity activity = activityService.findActivity(tid);

        response.reset();//清空缓存
        response.setCharacterEncoding("GBK");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + "activity_"
                + topic.getTid() + ".csv\"");//生成的文件初始文件名称

        //获取报表内容
        StringBuilder sb = activityService.getExportContent(activity, topic);

        OutputStream os = null;
        try {
            os = response.getOutputStream();
            byte[] byt = sb.toString().getBytes();
            os.write(byt);
        } catch (Exception e) {
            log.error("输出活动参与报表失败", e.getStackTrace());
        } finally {
            try {
                os.close();
            } catch (IOException e) {
                log.error("输出活动参与报表关闭输出流失败", e.getStackTrace());
            }
        }

        return null;
    }

 其中activityService.getExportContent(activity, topic)这个方法是报表内容,关键代码如下:

//参与活动用户信息
        boolean username = false, persons = false, phone = false, city = false,
                carNum = false, email = false, postNum = false, address = false, desc = false;
        sb.append("昵称");
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_USERNAME))) {
            sb.append(",");
            sb.append("真实姓名");
            sb.append(",");
            sb.append("用户ID");
            sb.append(",");
            sb.append("用户名");
            username = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_PERSONS))) {
            sb.append(",");
            sb.append("参加人数");
            persons = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_PHONE))) {
            sb.append(",");
            sb.append("联系电话");
            phone = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_CITY))) {
            sb.append(",");
            sb.append("所在城市");
            city = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_CARNUM))) {
            sb.append(",");
            sb.append("车牌号码");
            carNum = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_EMAIL))) {
            sb.append(",");
            sb.append("电子邮件");
            email = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_POSTNUM))) {
            sb.append(",");
            sb.append("邮政编码");
            postNum = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_ADDRESS))) {
            sb.append(",");
            sb.append("联系地址");
            address = true;
        }
        if (Boolean.parseBoolean(appConfigService.getValueByName(SystemConstant.ACTIVITYITEM_CONFIG_SHOW_DESC))) {
            sb.append(",");
            sb.append("特别说明");
            desc = true;
        }
        sb.append(",报名时间,状态");
        sb.append(separator);

        User regUser = null;
        List<ActivityItem> list = activityItemService.queryActivityItem(activity.getTid(), null, true);
        for (ActivityItem item : list) {
            sb.append(item.getAuthor().getNickname()).append(",");
            if (username) {
                sb.append(item.getName()).append(",");
                sb.append(item.getUid()).append(",");
                regUser = userService.findUser(item.getUid());
                if (regUser != null) {
                	sb.append(regUser.getUsername()).append(",");
                } else {
                	sb.append("").append(",");
                }
            }
            if (persons) {
                sb.append(item.getPersons()).append(",");
            }
            if (phone) {
                sb.append("\t" + item.getPhone() + "\t").append(",");
            }
            if (city) {
                sb.append(item.getCity()).append(",");
            }
            if (carNum) {
                sb.append(item.getCarNum()).append(",");
            }
            if (email) {
                sb.append(item.getEmail()).append(",");
            }
            if (postNum) {
                sb.append(item.getPostNum()).append(",");
            }
            if (address) {
                sb.append(item.getAddress()).append(",");
            }
            if (desc) {
                sb.append(item.getDescription().replace("\r","").replace("\n","").replaceAll("\"","”").replaceAll(",", " ")).append(",");
            }
            sb.append(sdf1.format(item.getCreateAt())).append(",")
                .append(item.getStatus() == SystemConstant.ACTIVITY_ITEM_NOT_CENSOR ? "尚未审核"
                        : item.getStatus() == SystemConstant.ACTIVITY_ITEM_CENSOR_PASS ?
                        "审核通过" : "被拒绝").append(separator);

 

导出的文件内容:

 

关于上面的方法有几个说明:

1.后缀为csv的文件,可以用excel打开,来自百科的解析:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

2.Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。(请注意,这是设计导致的;无法使用此功能将文档保存到用户的计算机上,而不向用户询问保存位置。)  

 

 

  • 大小: 10.9 KB
分享到:
评论

相关推荐

    C#利用Response流将数据库数据导出成Excel

    2. 其次,我们追加了Content-Disposition头信息,规定了响应的文件名和类型。 3. 然后,我们将DataTable对象转换为HTML表格,并将其写入Response流中。 4. 最后,我们使用Response.End()方法结束响应流,关闭响应流...

    ASP导出Excel-源文件

    这种功能在数据分析、报表生成和数据共享等方面非常实用。 在`out_excel.asp`这个源文件中,我们可以预期找到以下几个关键知识点: 1. **Response对象**:在ASP中,Response对象用于向客户端发送响应。在导出Excel...

    nodejs实现报表的导出

    要实现在Node.js中导出报表,我们首先需要一个能够操作和生成Excel文件的库。例如,`xlsx`是一个流行的选择,它可以读取、写入和创建Excel文件。在安装这个库时,可以通过npm(Node.js包管理器)执行以下命令: ```...

    asp.net导出csv文件

    ASP.NET 导出 CSV 文件 本文档将详细介绍如何使用 ASP.NET 导出 CSV 文件,包括相关的代码实现和知识点解析。 标题解释 ASP.NET 导出 CSV 文件是指使用 ASP.NET ...该技术可以广泛应用于数据导出、报表生成等领域。

    jsp页面生成word或excel

    ### 使用JSP实现Word、Excel格式报表打印 #### 一、使用JSP生成Word文档 在JSP中生成Word文档可以通过设置正确的`content-type`来实现。具体来说,只需要在JSP页面的头部添加以下指令: ```jsp ``` 这样设置后...

    两种报表导出方式

    // 前台导出报表 function exportReport() { // 谷歌浏览器,要设置不默认存储位置才能调整选择下载地址 window.location.assign("/system/getExcel"); } ``` #### 四、总结 报表导出是一项非常实用的功能,通过...

    导出jsp页面为excel文档

    这种方式利用了浏览器对MIME类型的识别能力以及响应头中的`Content-Disposition`字段来模拟Excel文件的发送过程,从而实现了JSP页面内容到Excel文件的导出。 4. **扩展应用**: - **动态生成Excel内容**:可以在...

    C_导出Excel总结.doc

    在C#中导出Excel是一种常见的需求,尤其在ASP.NET开发中,用于将数据报表或者用户界面内容导出为易于分析和存储的电子表格格式。本文主要讨论两种方法来实现这一功能。 首先,我们可以将整个HTML页面输出为Excel。...

    个性化定制excel报表数据导出工具

    通常会采用HTTP响应头设置Content-Disposition属性,让浏览器以附件形式下载文件。 个性化定制报表工具的应用场景非常广泛,例如: - 财务部门可以根据不同时间段、不同业务线生成定制化的财务报告。 - 销售部门...

    .net 导出有样式的报表

    本知识点将深入探讨如何在.NET环境中实现这一功能,包括如何拼接表头、设置样式以及导出报表的实现代码。 首先,我们需要理解报表的基本构成。报表通常由数据、表头、列名和样式组成。在.NET中,我们可以使用各种库...

    Apache之 excel的POI报表导出

    当用户触发导出操作时,可以使用HttpServletResponse的setHeader方法设置Content-Disposition头,这样浏览器会弹出保存文件的对话框: ```java response.setHeader("Content-Disposition", "attachment; filename=...

    excel导出 内置导出代码,

    在IT行业中,Excel导出是一项常见的需求,尤其是在数据分析、报表生成和数据交换的场景下。本文将详细讲解如何使用Excel类库实现内置的文本导出代码,并结合PHP框架ThinkPHP5(简称tp5)的加载文件方法进行应用。 ...

    Ireport导出excel的Java代码

    resp.setHeader("Content-disposition", "attachment;filename=" + fileName); ServletOutputStream outputStream = resp.getOutputStream(); JRXlsExporter exporter = new JRXlsExporter(); exporter....

    java 导出exlce报表

    response.setHeader("Content-Disposition", "attachment; filename=报表名称.xlsx"); ``` 6. **写入输出流**:将工作簿对象写入到HTTP响应的输出流中,完成导出。 ```java try (OutputStream out = response....

    asp/net导出界面excel

    在ASP.NET中,导出网页数据到Excel是常见的需求,特别是在数据分析、报表生成或数据导出场景下。这里我们将深入探讨如何使用C#语言来实现这个功能,以及涉及的安全性考虑。 首先,导出界面为Excel通常有两种主要...

    前台用extjs后台用java.如何导出excel报表

    在设置完所有单元格后,需要设置HTTP响应的头部信息,`Content-disposition`用于指示浏览器以附件形式下载文件,而`Content-Type`字段指定了文件类型为Excel。最后,调用`wbook.write()`将工作簿写入输出流,关闭...

    ASP.NET中 Execl导出的六种方法实例

    - 设置HTTP响应头,包括内容类型(application/ms-excel)和附件头(Content-Disposition)。 - 使用Response.BinaryWrite将文件内容写入到HTTP响应流中。 - 清空响应并关闭文件流。 2. 利用DataSet进行数据导出...

    DataTable导出为word,excel,html,csv,pdf

    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + strFileName + ".doc"); HttpContext.Current.Response.ContentType = "application/ms-word"; control....

    excel导出的js

    在IT行业中,数据导出是一项常见的需求,尤其是在数据分析和报表制作时。Excel作为一种广泛使用的电子表格工具,其格式被广大用户所接受。本篇将详细探讨如何使用JavaScript(js)来实现Excel文件的导出,以及与Java...

    PHP导出Excel代码

    在PHP开发中,导出Excel文件是常见的需求,例如生成报表、数据分析或数据备份等。PHPExcel库是一个广泛使用的PHP库,能够帮助开发者创建、读取和修改Excel文件。本篇文章将详细探讨如何使用PHP和PHPExcel库来实现...

Global site tag (gtag.js) - Google Analytics