public Resultmodel getexpenseMessagx(HttpServletResponse response, String date1, String date2) {

    long startTime = System.currentTimeMillis();    Log.info("开始:费用表" + "///类.方法:" + this.getClass().getSimpleName() + "." + Thread.currentThread().getStackTrace()[1].getMethodName() + "///开始时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));    Log.info("入参date1:" + date1 + "///date2=" + date2);    //  定义两个date型变量 d1为3月2日d2是2月1日    //先求出两个日期之间的天数(d2.getTime() - d1.getTime()) / (3600L * 1000 * 24)    Date Date1 = null;    Date Date2 = null;    try {        Date1 = DateTimeUtil.stringToDate(date1);        Date2 = DateTimeUtil.stringToDate(date2);    } catch (ParseException e) {        Log.info("日期转换错误");        e.printStackTrace();    }    long days = (Date2.getTime() - Date1.getTime()) / (3600L * 1000 * 24);    SXSSFWorkbook wb = new SXSSFWorkbook();    String[] listTitle = getlistTitle();//标题    String[] listTitle2 = getlistTitle2();//标题    String excelName = date1 + "至" + date2 + "费用表";//Excel名

    String sheet1 = "xxx";    creatSheet1(wb, sheet1, listTitle, Date1, days);    try {        SXSSExcelUtil.outExcel(response, wb, excelName);    } catch (Exception e) {        Log.error("输出异常" + e.getMessage());        return new Resultmodel(400, "返回异常");    }    //结束    long endTime = System.currentTimeMillis(); //获取结束时间    Log.info("结束:费用表" + "程序运行时间:" + (endTime - startTime) + "ms");    return null;}
public void creatSheet1(SXSSFWorkbook wb, String sheetx, String[] listTitle, Date Date1, Long days) {    //1.创建Excel    //整体    //整体    CellStyle cellStyle = wb.createCellStyle();    // cellStyle.setAlignment(SXSSFCellStyle.ALIGN_CENTER); // 水平居中    cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 水平居中    cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // 垂直居中

    //第一行    CellStyle titleCellStyle = wb.createCellStyle();    Font font = wb.createFont();    font.setColor(HSSFColor.GREEN.index);    titleCellStyle.setFont(font);    titleCellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 水平居中    titleCellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // 垂直居中

    Sheet sheet = wb.createSheet(sheetx);    //冻结首行    sheet.createFreezePane(0, 1, 0, 1);    //sheet.createFreezePane(1, 1, 1, 1);//

    Row row0 = sheet.createRow(0);

    //listSize 总列数  标题列=正文列    int listSize = listTitle.length;    //输入标题栏    for (int j = 0; j < listSize; j++) {// 5列        Cell cell = row0.createCell((short) j);        cell.setCellValue(listTitle[j].toString());        cell.setCellStyle(titleCellStyle);    }    CellRangeAddress region = new CellRangeAddress(0, 0, 10, 13);    sheet.addMergedRegion(region);

    int rowSize = 0;    for (int x = 0; x < days; x++) {

        Date dateSubDay = DateTimeUtil.getDateSubDay(Date1, x);        String date = DateTimeUtil.getyyyyMMddTime(dateSubDay);        //查询数据库        List<workerMessage> workerMessageList1 = WkOrderWorkerFeeMapper.selectworkerMessageByDay(date);//数据        ArrayList<Map<Integer, String>> list = getlist(workerMessageList1);        rowSize += list.size();//总行数        int y = rowSize - list.size();

        // 从第二行输入  或者说输入数据的第一行 先创建再放值        for (int i = y; i < rowSize; i++) { // 几行            Map<Integer, String> map = list.get(i - y);            //存在合并            Row row = sheet.createRow(i + 1);//创建同一个序列号的第一行            for (int p = 0; p < map.size(); p++) {                Cell cell = row.createCell(p);                cell.setCellValue(map.get(p));//填充数值 包含合并列  后面在合并                cell.setCellStyle(cellStyle);            }            //=========================前 前17列合并            int j = 0;//相同行            String serial = map.get(0);            for (int k = i + 1; k < rowSize; k++) {//查前17列重                Map<Integer, String> _map = list.get(k - y);                String _serial = _map.get(0);                if (serial.equals(_serial)) {                    j++;                } else {                    break;                }            }            if (j > 0) {                for (int p = 0; p < 17; p++) {                    CellRangeAddress cra = new CellRangeAddress(i + 1, i + j + 1, p, p);                    sheet.addMergedRegion(cra);//合并                }

            }            //===========================中 创建中间段 17--到倒数1列            for (int k = 0; k < j; k++) {                Map<Integer, String> _map1 = list.get(i + 1 + k - y);                Row _row = sheet.createRow(i + 1 + k + 1);//创建行

                for (int p = 17; p < _map1.size() - 1; p++) {                    Cell cell = _row.createCell(p);

                    cell.setCellValue(_map1.get(p));                    cell.setCellStyle(cellStyle);                }            }            //===========================后 最后一行的合并            if (j > 0) {                CellRangeAddress cra = new CellRangeAddress(i + 1, i + j + 1, map.size() - 1, map.size() - 1);                sheet.addMergedRegion(cra);//合并            }            i += j;

            //无合并行           /* Row row = sheet.createRow(i + 1);//创建同一个序列号的第一行            for (int p = 0; p < map.size(); p++) {                Cell cell = row.createCell(p);                cell.setCellValue(map.get(p));//填充数值 包含合并列  后面在合并                cell.setCellStyle(cellStyle);            }*/

        }

    }    System.out.println("===============正常=====================");    setSheet(sheet, listSize);}
public String[] getlistTitle() {    String[] listTitle = new String[]{"工单号", "旺旺ID", "创建日期", "金额", "类型", "是否支付(1:支付;0:未支付)", "商家", "店铺", "客户姓名", "客户电话", "地址",            "地址", "地址", "地址", "销售单号", "工人名称", "工人电话", "商品类名", "商品名称", "高度", "长度", "数量", "工人商品单价", "工人商品价格", "商家商品单价",            "商家商品价格", "完成时间"};    return listTitle;

}
private static void setSheet(Sheet sheet, int size) {    for (int columnNum = 0; columnNum < size; columnNum++) {        int columnWidth = sheet.getColumnWidth(columnNum) / 256;        for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {            Row currentRow;            //当前行未被使用过            if (sheet.getRow(rowNum) == null) {                currentRow = sheet.createRow(rowNum);            } else {                currentRow = sheet.getRow(rowNum);            }

            if (currentRow.getCell(columnNum) != null) {                Cell currentCell = currentRow.getCell(columnNum);                if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {                    int length = currentCell.getStringCellValue().getBytes().length;                    if (columnWidth < length) {                        columnWidth = length;                    }                }            }        }        sheet.setColumnWidth(columnNum, columnWidth * 256);    }}

excel 数据量较大边查询边输入到excel表格中的更多相关文章

  1. poi导出excel数据量过大

    问题:使用poi导出excel,数据量过大导致内存溢出 解决思路:1.多sheet导出 2.生成多个excel打包下载 3.生成csv下载 本文使用的是第二个思路,代码如下: poiUtil工具类 p ...

  2. sql查询未走索引问题分析之查询数据量过大

    前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...

  3. 系统导出数据到excel,数据量过大(大约10W)条,导致服务器 cpu 100%解决方法

    系统导出数据到excel,数据量过大(大约10W)条,导致服务器 cpu 100%解决方法

  4. Mysql中使用JDBC流式查询避免数据量过大导致OOM

    一.前言 java 中MySQL JDBC 封装了流式查询操作,通过设置几个参数,就可以避免一次返回数据过大导致 OOM. 二.如何使用 2.1 之前查询 public void selectData ...

  5. sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数

    -- 数据量比较大的情况,统计十分钟内每秒钟执行次数 ); -- 开始时间 ); -- 结束时间 declare @num int; -- 结束时间 set @begintime = '2019-08 ...

  6. Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...

  7. Mysql数据量较大时分页查询优化

    据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, id 是主键,vtype是int,vtype是索引. 最后co ...

  8. el-select数据量过大引发卡顿,怎么办?

    本文分享自华为云社区<解决el-select数据量过大的卡顿的两种思路与一种实施方案>,作者: KevinQ. 经典问题:在测试环境好好的,怎么到正式环境就不行了? --本文:数据量变了. ...

  9. 针对数据量较大的表,需要进行跨库复制,采用navcat 实现sqlite数据库跨数据库的数据表迁移 [转载]

    2014年12月13日 14:36 新浪博客 (转自http://www.cnblogs.com/nmj1986/archive/2012/09/17/2688827.html) 需求: 有两个不同的 ...

随机推荐

  1. java double 保留x位小数

    以下是保留两位的例子 public class Test1 { public static void main(String[] args) { double a = 123450; double d ...

  2. centos7分区建议

    https://www.cnblogs.com/set-config/p/9040407.html

  3. asp.net在配置文件里设置多种编码方式的研究

    我们在做asp.net的程序时,在根目录下肯定会有一个web.config的文件, 有点开发经验的可能都知道,它是配置程序的全局信息的地方, 当然了,也可以在这里做更多的事情,下面我们来研究一下 ,如 ...

  4. Promise笔记

    参考:阮一峰es6(http://es6.ruanyifeng.com/#docs/promise) 时间:2018-07-03 类型:个人笔记 解决的问题:异步编程的一种解决方案. 定义:Promi ...

  5. django 无法生成表

    1.删除该APP下migration下的文件,只留init文件即可 2.删除表django_migration的关于该app的所有记录 3.makemigrations,migrate

  6. JavaScript:今天是今年第几周?

    用js实现,今天是今年第几周? 基本思路: 1.当前时间 - 今年1月1日0时,拿到时间差(毫秒数) 2.时间差/7天毫秒数,向上取整 var d = new Date('2018-01-01 00: ...

  7. 关于webstorm链接不上SVN的解决办法

    使用WEBSTROM上传代码是很方便的,但是通过它调用SVN时,经常会出现问题,我在使用它调用TortoiseSVN时就出现了一些问题,好在问题已经解决,现在把解决办法分享给大家: 首先,看看,安装时 ...

  8. python 阿狸的进阶之路(6)

    常用模块 json # 序列化 #将内存的数据存到硬盘中,中间的格式,可以被多种语言识别,跨平台交互数据 #json 可以将字典之类的数据类型存到字典中 import json dic = {&quo ...

  9. Windows 8 禁用强制驱动签名

    打开管理员模式的命令行,运行命令: bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS bcdedit/set testsigning on ...

  10. pod install vs pod update

    Podfile文件,Podfile.lock文件 Podfile文件:指定依赖库的版本规则 Podfile.lock文件:记录当前工程中使用的依赖库的版本号 pod install会去安装podfil ...