【Java】【47】导出数据到Excel

前言:

一般后台的报表查询页面,都会有导出数据到Excel表的功能

正文:

JS:

window.open("后台接口地址");

Controller层:

@ApiOperation(value = "导出列表")
@RequestMapping(value = "excel/exportExcel", method = RequestMethod.GET)
public void exportExcel(HttpServletResponse response, QueryVo query) {
    this.theService.exportCsvPointList(response, query);
}

Service层:

@Override
public void exportCsvPointList(HttpServletResponse response, QueryVo query) {
    String title = "积分记录";
    String fileName = title + ".csv";

    //根据查询条件query,查询出对应的数据
    List<Entity> list;

    LinkedHashMap<String, String> headMap = new LinkedHashMap<>();
    headMap.put("phone", "手机号"); //phone为Entity中的字段名,手机号为excel表的表头名称
    headMap.put("name", "姓名");

    ExportCsvUtil.exportCSV(title, fileName, list, headMap, response);
}

工具类:

ExportCsvUtil

package com.bf.base.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;

/**
 * 下载CSV文件
 */
public class ExportCsvUtil {
    /**
     * @param response 返回体
     * @param list 数据集合
     * @param title 主标题
     * @param map 子标题与对象属性的映射
     * @param fileName 文件名
     */

    public static <T> void exportCSV (String title, , String fileName, List<T> list, LinkedHashMap<String,String> map, HttpServletResponse response) {
        JSONArray array = new JSONArray();
        for (T obj : list) {
            array.add(obj);
        }

        // 表格头
        List<String> headList = new ArrayList<>();
        for (Entry<String, String> entry : map.entrySet()) {
            headList.add(entry.getValue());
        }

        // 数据
        BufferedWriter csvWtriter = null;
        try {
            List<List<String>> dataList = new ArrayList<List<String>>();
            for (Object obj : array) {
                List<String> rowList = new ArrayList<>();
                JSONObject jo = (JSONObject) JSONObject.toJSON(obj);
                for (Entry<String, String> entry : map.entrySet()) {
                    String value = entry.getValue();
                    String key = entry.getKey();
                    String joValue = jo.get(key) == null ? "" : jo.get(key).toString();
                    rowList.add(joValue);
                }
                dataList.add(rowList);
            }

            // 文件下载,使用如下代码
             response.setContentType("application/csv;charset=gb18030");
             response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
             ServletOutputStream out = response.getOutputStream();
             csvWtriter = new BufferedWriter(new OutputStreamWriter(out, "gb18030"), 1024);

            /*int num = headList.size() / 2;
            StringBuffer buffer = new StringBuffer();
            for (int i = 0; i < num; i++) {
                buffer.append(" ,");
            }
            csvWtriter.write(buffer.toString() + title + buffer.toString());
            csvWtriter.newLine();*/

            // 写入文件头部
            writeRow(headList, csvWtriter);

            // 写入文件内容
            for (List<String> row : dataList) {
                writeRow(row, csvWtriter);
            }
            csvWtriter.flush();
            csvWtriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                csvWtriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 写一行数据
     * @param row 数据列表
     * @param csvWriter
     * @throws IOException
     */
    private static void writeRow(List<String> row, BufferedWriter csvWriter) throws IOException {
        for (String data : row) {
            StringBuffer sb = new StringBuffer();
            String rowStr = sb.append("\"").append(data).append("\",").toString();
            csvWriter.write(rowStr);
        }
        csvWriter.newLine();
    }
}

原文地址:https://www.cnblogs.com/huashengweilong/p/11363547.html

时间: 2024-08-04 18:28:37

【Java】【47】导出数据到Excel的相关文章

java代码导出数据到Excel、js导出数据到Excel(三)

jsp内容忽略,仅写个出发按钮: <button style="width: 100px" onclick="expertExcel()" >JS导出Excel</button>           <button style="width: 100px" onclick="expertWord()" >JS导出Word</button>           <button

java Servlet导出数据到Excel文件

package com.lbc.excel.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet

从DataTable高效率导出数据到Excel

首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: 1 using Microsoft.Office.Interop.Excel; 2 using System.Runtime.InteropServices; 3 4 [DllImport("User32.dll", CharSet = CharSet.Auto)] 5 public static extern int GetWindo

asp.net使用MVC4框架基于NPOI做导出数据到Excel表

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本

spring boot 使用POI导出数据到Excel表格

摘自:https://www.cnblogs.com/hopeofthevillage/p/12099807.html spring boot 使用POI导出数据到Excel表格 2019-12-26 00:17  全me村的希望  阅读(42)  评论(0)  编辑收藏 在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表格的操作无疑是最强大的.

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult 导出EXCEL方法总结:MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可:优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件: 2.设置输出头为:application/ms-excel,再输出拼接的HTM

Dynamics CRM导出数据到Excel

原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM将数据导出到Excel的功能. (一)导出数据到Excel的三种类型 下图中点击红框内的按钮EXPORT TO EXCEL,会弹出三个选项 第一个是一个静态工作表,将当前页面内的数据导出到一张表内.该数据是静态的,也就是说CRM里的数据发生改变,工作表的数据不会发生相应修改.如果勾选了”Make t

php导出数据到excel,防止身份证等数字字符格式变成科学计数的方-------缺点,必须使用table tr td

php导出数据到excel,防止身份证等数字字符格式变成科学计数的方 时间:2012-08-17 13:50来源:未知 作者:硅峰网络-红豆 点击:219次 在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel的格式为文本格式. 我试用过第一种确实可以显示,但是有个'号在那里感觉确实不是很好,虽然听说不影响,但是需要用户点击那个单元格那个单引号才消失,并且在该 在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel

PHP导出数据到Excel

PHP导出数据到Excel 在Web开发中经常需要将一些数据导入到Excel表格中,比如需要导出符合条件的用户数据,导出项包括姓名.性别.***号.联系方式等等.那么问题来了,在导出的数据中如果出现比较长的数值类型的项时,默认按科学计数法表示,比如***号这显然不是我们需要的,那么我们怎么做才能让数据按我们要求的格式显示呢? 查到一些相关资料,摘抄如下: 首先,我们了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所