java 导出百万数据到excel
@RequestMapping("export")
public void write(HttpServletRequest request,HttpServletResponse response,String agent,String starttime,
String endtime,int callduration,String dst,String answer) {
try {
Map<String,Object> param = new HashMap<>();
User user = (User) request.getSession().getAttribute(Constant.LOGIN_USER);
param.put("agent", agent);
param.put("starttime", starttime == "" ? DateUtil.getFirstDayByMonth() : starttime);
param.put("endtime", endtime == "" ? DateUtil.getLastDayByMonth() : endtime);
param.put("callduration", callduration);
param.put("dst",dst);
param.put("answer",answer);
if(DateUtil.isThisMonth(param.get("starttime").toString()) && DateUtil.isThisMonth(param.get("endtime").toString())){
param.put("cdr", "cdr"+user.getPbxid());
}else{
param.put("cdr", "cdr"+user.getPbxid()+"_"+DateUtil.getYearAndMonth(param.get("starttime").toString()));
}
// 创建CSV写对象 查询数据
List<Map<String, Object>> list = this.cdrService.listCdrs(param);
// 写入临时文件
File tempFile = File.createTempFile("vehicle", ".csv");
CsvWriter csvWriter = new CsvWriter(tempFile.getCanonicalPath(), ',', Charset.forName("UTF-8"));
// 写表头
String headers[] = new String[]{"id", "主叫", "被叫", "开始时间", "应答时间", "结束时间", "总时长(秒)", "通话时长(秒)", "通话状态","挂断方"};
csvWriter.writeRecord(headers);
for(int i = 0;i<list.size();i++){
csvWriter.write(list.get(i).get("clid").toString()==null? "" :list.get(i).get("clid").toString());
csvWriter.write(list.get(i).get("src").toString()==null? "" :list.get(i).get("src").toString());
csvWriter.write(list.get(i).get("dst").toString()==null? "" :list.get(i).get("dst").toString());
csvWriter.write(list.get(i).get("start").toString()==null? "" :list.get(i).get("start").toString());
csvWriter.write(list.get(i).get("answer").toString()==null? "" :list.get(i).get("answer").toString());
csvWriter.write(list.get(i).get("end").toString()==null? "" :list.get(i).get("end").toString());
Integer billsec = Integer.parseInt(list.get(i).get("billsec").toString());
Integer duration = Integer.parseInt(list.get(i).get("duration").toString());
csvWriter.write(String.valueOf(billsec+duration));
csvWriter.write(list.get(i).get("billsec").toString()==null? "" :list.get(i).get("billsec").toString());
String disposition = list.get(i).get("disposition").toString();
if (disposition.equals("ANSWERED")) {
csvWriter.write("已接通");
} else if (disposition.equals("NO ANSWER")) {
csvWriter.write("未接通");
} else if (disposition.equals("BUSY")) {
csvWriter.write("忙碌");
} else if (disposition.equals("FILED")) {
csvWriter.write("失败");
} else {
csvWriter.write("");
}
String hanger = list.get(i).get("hanger").toString();
if (Integer.parseInt(hanger)==-1) {
csvWriter.write("客户挂断");
} else {
csvWriter.write("坐席挂断");
}
csvWriter.endRecord();
}
csvWriter.close();
/**
* 写入csv结束,写出流
*/
java.io.OutputStream out = response.getOutputStream();
byte[] b = new byte[10240];
java.io.File fileLoad = new java.io.File(tempFile.getCanonicalPath());
response.setContentType("application/csv");
response.setHeader("content-disposition", "attachment; filename="+ DateUtil.getDate()+".csv");
out.write("\ufeff".getBytes());
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length", length1);
java.io.FileInputStream in = new java.io.FileInputStream(fileLoad);
int n;
while ((n = in.read(b)) != -1) {
out.write(b, 0, n); // 每次写入out1024字节
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
注意:如果是数字类型太长超过16位写入到excel会丢失
解决办法 将 csvWriter.write 改成 csvWriter.writeRecord()
把长数字转换成字符串,并在输在字符串前面增加“\t”。
例如:
String un = list.get(i).get("uniqueid").toString().replaceFirst("#", "");
String[] u = new String[]{"\t"+un};
csvWriter.writeRecord(u,true);
java 导出百万数据到excel的更多相关文章
- PHP导出MySQL数据到Excel文件
PHP导出MySQL数据到Excel文件 转载 常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存 ...
- .NET使用Office Open XML导出大量数据到 Excel
我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...
- Java 导出大批量数据excel(百万级)(转载)
参考资料:http://bbs.51cto.com/thread-1074293-1-1.html http://bbs.51cto.com/viewthread.ph ...
- SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...
- Java导出带格式的Excel数据到Word表格
前言 在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用 ...
- 导出表格数据到excel并下载(HSSFWorkbook版)
这里主要前面是通过一个全局变量,在layui的done回调里拿到数据,然后将该数据导出到excel,这里要注意一点,下载excel不能用ajax方式,如果采用ajax下载默认会读取response返回 ...
- 导出数据库数据制成Excel和txt
引用ICSharpCode.SharpZipLib.dll 1.编写压缩和解压代码 using System; using System.Collections.Generic; using Syst ...
- C#通过OLEDB导出大数据到Excel
C#导出数据到Excel,基本有两种方法,一种方法是通过Microsoft.Office.Interop.Excel.Application,一行一列的写入Excel中:另一种方法是通过OLEDB,利 ...
随机推荐
- css3动画机制原理和实战
这段时间喜欢上css3动画效果了,关于这个每个人都有不同的看法,在我个人看来css3在做一些小页面的动画效果还是很好用的,一些简单的小动画要是用js的话,未免浪费. 要是做大一点的话最好js+css3 ...
- HDU 5421 Victor and String (回文自动机)
题目大意:让你维护一个字符串,支持在开头结尾插入字符,以及查询本质不同的回文串数量以及回文串总数量 开头结尾都维护一个$last$指针,如果插入新字符后,整个串是一个回文串,就把另一个$last$赋值 ...
- Shell(一)变量
一.简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用 ...
- 单元测试Struts2的Action(包含源码)
很久没有从头搭建Struts2的环境了.最近,认真实践了单元测试Struts2.Spring等Java项目. 今天特意写的是单元测试Struts2的Action,遇到了不少问题,果然是实践出真知啊. ...
- C语言实现面向对象(转)
1.引言 面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法.设计思想. 它表现出来的三个最基本的特性就是封装.继承与多态. 很多面向对象的编程语言已经包含这三个特性了,例如 Sm ...
- sql删除注意的问题
老大骂你都是有原因的,基础要打好!!!! SQL关于删除的三个语句:DROP.TRUNCATE. DELETE 的区别. DROP test; 删除表test,并释放空间,将test表删除的一干二净 ...
- 2015 Multi-University Training Contest 6 hdu 5361 In Touch
In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- DebugBar v7.0.2 注册码
blog.sina.com.cn/seoerx 14d4fb95f89bdd277fff0d20910be400 seoerx.diandian.com 505dc8424062f9895c2dd14 ...
- COGS——T 2342. [SCOI2007]kshort || BZOJ——T 1073
http://www.cogs.pro/cogs/problem/problem.php?pid=2342 ★★☆ 输入文件:bzoj_1073.in 输出文件:bzoj_1073.out ...
- leetCode(24):Binary Search Tree Iterator
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...