文档章节

统计表excel导出

王静0716
 王静0716
发布于 2018/04/12 17:14
字数 443
阅读 81
收藏 0

1、基于工具类ExcelUtil的exportExcel(String title, String[] headers, Collection<Map<String, Object>> dataset, OutputStream out);

2、通用方法

/**
	 * 共用的 导出excel方法
	 * @param fileName excel文件名
	 * @param headList 第一行内容
	 * @param fieldDataList 数据块
	 * @param response
	 * @throws Exception
	 */
	private void exportExcel(String fileName, List<String> headList, List<Map<String, Object>> fieldDataList,
							 HttpServletResponse response) throws Exception {
		response.setContentType("application/octet-stream");
		response.addHeader("Content-Disposition",
				"attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8") + ";");
		OutputStream out = response.getOutputStream();
		ExcelUtil<List<Map<String, Object>>> excelUtil = new ExcelUtil<>();
		String[] headers = new String[headList.size()];
		headList.toArray(headers);
		excelUtil.exportExcel(fileName, headers, fieldDataList, out);
		out.close();
	}

3、

/**
     * 获取2个日期间 的 所有月份 集合 ,比如 ["2018-01", "2018-02", ……]
     * @param startDate
     * @param endDate
     * @return
     */
    public static List<String> getMonthBetween(String startDate, String endDate) throws ParseException {
        ArrayList<String> result = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月

        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();

        min.setTime(sdf.parse(startDate));
        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

        max.setTime(sdf.parse(endDate));
        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

        Calendar curr = min;
        while (curr.before(max)) {
            result.add(sdf.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);
        }
        return result;
    }
public static List<String> convertToEnglishMonth(List<String> months) {
        List<String> englishMonths = new ArrayList<>();
        for(String month : months) {
            englishMonths.add(getEnglishMonth(month));
        }
        return englishMonths;
    }

    /**
     *
     * @param month  2018-03 -> Mar-18
     * @return
     */
    public static String getEnglishMonth(String month) {
        String[] yearAndMonth = month.split("-");
        StringBuilder sb = new StringBuilder();
        switch (yearAndMonth[1]) {
            case "01" : {
            	sb.append("Jan");
            	break;
            }
            case "02" : {
            	sb.append("Feb");
            	break;
            }
            case "03" : {
            	sb.append("Mar");
            	break;
            }
            case "04" : {
            	sb.append("Apr");
            	break;
            }
            case "05" : {
            	sb.append("May");
            	break;
            }
            case "06" : {
            	sb.append("Jun");
            	break;
            }
            case "07" : {
            	sb.append("Jul");
            	break;
            }
            case "08" : {
            	sb.append("Aug");
            	break;
            }
            case "09" : {
            	sb.append("Sep");
            	break;
            }
            case "10" : {
            	sb.append("Oct");
            	break;
            }
            case "11" : {
            	sb.append("Nov");
            	break;
            }
            case "12" : {
            	sb.append("Dec");
            	break;
            }
            default: {}
        }
        sb.append("-").append(yearAndMonth[0].substring(2));
        return sb.toString();
    }
/**
	 * 把日期转化为英文,并返回(英文日期)headList
	 * @param monthList     ["2018-04", ……]
	 * @param firstCellName 第一格内容
	 * @return              [" ", "Apr-18", ……]
	 * @throws ParseException
	 */
	private List<String> getHeadEngMonthList(String firstCellName, List<String> monthList, String lastCellName) throws ParseException {
		// 头headList
		List<String> engMonthList = DateUtil.convertToEnglishMonth(monthList);
		List<String> engHeadList = new ArrayList<>();
		if(StringUtils.isNotEmpty(firstCellName)) {
			engHeadList.add(firstCellName);
		}
		engHeadList.addAll(engMonthList);
		if(StringUtils.isNotEmpty(lastCellName)) {
			engHeadList.add(lastCellName);
		}
		return engHeadList;
	}

4、

举例:

基于现有的表结构:这2张表都有user_id、bind_status字段。

需求:当月内,客户既有绑定保单状态,又有未绑定保单状态,则一律算作保单用户。

 

 

© 著作权归作者所有

上一篇: Oracle常用函数
下一篇: sql查询优化
王静0716

王静0716

粉丝 32
博文 63
码字总数 27883
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

数据量不确定的情况下导出excel饼图图表的方法?

大家好,我一直用jxls+poi导出excel表格,框架建好,主要把excel模板做好就能导出数据了,比较方便,但是今天遇到新的情况:需要导出的excel里包含一个饼图统计表。 但是统计的数据在做模板时...

ActionTime
2016/10/28
523
0
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed

excel导出弹出下载框时报错,但是东西都可以出来,对程序没有什么影响,但是控制台报错,java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been commi...

javaaaaatr
2018/07/09
3.1K
1
问高手 一个phpexcel导出excel的问题

phpexcel 导出excel的时候 在服务器和 本地都同时导出了一份,为什么的我服务器上面的excel打开有数据,本地的打开是空白的,啥都没有啦 $param = [ 'uid' => 2120872 ]; $order = Jdbc::ge...

打飞机的猪猪侠
2018/11/30
74
2
利用GooSeeker分词、Ucient和NetDraw进行社会网络分析 - 知乎

社会网络是一个关系与关系之间的网络,进行社会网络分析,我们要弄清楚的是网络中包含哪些具有相互联系的节点,这些节点之间又具有怎样的关系,以及每个节点在整个网络中占有何种地位。 而有...

学习python网络爬虫建设智慧时空数据库
2019/10/21
0
0
python 统计MySQL大于100万的表

一、需求分析 线上的MySQL服务器,最近有很多慢查询。需要统计出行数大于100万的表,进行统一优化。 需要筛选出符合条件的表,统计到excel中,格式如下: 二、统计表的行数 统计表的行数,有...

John966
01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMQ消息中间件技术精讲学习笔记

[TOC] RabbitMQ消息中间件技术精讲学习笔记 错别字有点多, 改了一部分. 剩下的不影响阅读,实在没精力改了... 业界主流消息中间件介绍 MQ衡量指标 服务性能 数据存储 集群架构 主流MQ介绍 Ac...

我爱吃炒鸡
10分钟前
11
0
从"曼巴精神"中学到的做事方式

致敬曼巴 最近一直想写一篇关于曼巴精神的文章,作为科比球迷,今年发生的事情的确让我们难过,不过生活还要继续,虽然科比已经离开了我们,但曼巴精神永存,下面从几点来讲述曼巴精神在我们...

科比可比克
10分钟前
9
0
使用JavaScript在文本框中的Enter键上触发按钮单击

问题: I have one text input and one button (see below). 我有一个文本输入和一个按钮(见下文)。 How can I use JavaScript to trigger the button's click event when the Enter key ......

技术盛宴
20分钟前
14
0
展示如何在checkout里使用quote,quote item, address, shopping cart

展示如何更改并且在定制化的时候高效应用这些模块。 以下实体继承 \Magento\Framework\Model\AbstractExtensibleModel ,所以你可以使用第4章中讨论的可扩展属性。 Quote Quotes 是客户购物车...

忙碌的小蜜蜂
47分钟前
18
0
面向对象思想设计原则及常见设计模式

1、面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 1.1、单一职责原则 高内聚,低耦合 每个类应该只有一个职责,...

庭前云落
55分钟前
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部