`
wmch
  • 浏览: 72622 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

大数据量下载excel

 
阅读更多

public void download(int pageSize, int total, HttpServletRequest request,

HttpServletResponse response, Criteria criteria) {

// 引入压缩文件工具类

ZipCompress zipComp = new ZipCompress();

// 引入文件处理工具类

FileUtil fileUtil = new FileUtil();

 

int pageNumber = 0;

if (total > pageSize) {

pageNumber = total / pageSize + 1;

} else {

pageNumber = 1;

}

 

// 下载路径

String path = request.getSession().getServletContext().getRealPath("/")

+ "uploadDir" + File.separator;

// 多excel存放文件路径

String filePath = request.getSession().getServletContext()

.getRealPath("/")

+ "uploadDir"

+ File.separator

+ UUID.randomUUID()

+ File.separator;

File file = new File(filePath);

if (!file.exists()) {

file.mkdir();

}

 

// 将查询出来的所有数据分批插入到excel生成excel

if (pageNumber == 1) {

// 按照系统设置的大小查询数据

List dataList = this.psbcClientFilterDataMapper.selectDownSQL(criteria);

logger.info("数量..." + dataList.size());

// 按照系统设置的大小输出excel

try {

excelExport(response,request, dataList, criteria);

} catch (Exception e) {

e.printStackTrace();

}

} else {

for (int i = 0; i < pageNumber; i++) {

 

// 设置分页信息

criteria.setOracleEnd(pageSize + pageSize * i);

criteria.setOracleStart(pageSize * i);

OutputStream out = null;

try {

out = new FileOutputStream(filePath + "业绩统计查询报表(" + i

+ ").xls");

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 按照系统设置的大小查询数据

List dataList = this.psbcClientFilterDataMapper

.selectDownSQL(criteria);

logger.info("数量..." + dataList.size());

// 按照系统设置的大小输出excel

try {

excelExport(response, dataList, out, criteria);

} catch (Exception e) {

e.printStackTrace();

}

 

}

 

// 压缩文件

try {

zipComp.compressedFile(filePath, path, "统计查询报表.zip");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

fileUtil.DeleteFolder(filePath);

}

// 下载文件

DownloadUtil.download(path + "统计查询报表.zip", response);

// 删除压缩文件

fileUtil.deleteFile(path + "统计查询报表.zip");

 

}

 

}

 

 

 

 

 

 

 

 

 

public void compressedFile(String resourcesPath,String targetPath,String targetName) throws Exception{

File resourcesFile = new File(resourcesPath);     //源文件

File targetFile = new File(targetPath);           //目的

//如果目的路径不存在,则新建

if(!targetFile.exists()){     

targetFile.mkdirs();  

}

 

//String targetName = resourcesFile.getName()+".zip";   //目的压缩文件名

FileOutputStream outputStream = new FileOutputStream(targetPath+targetName);

ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));

 

createCompressedFile(out, resourcesFile, "");

 

out.close();  

}

 

 

 

 

 

 

 

 

 

 

 

 

 

public void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{

//如果当前的是文件夹,则进行进一步处理

if(file.isDirectory()){

//得到文件列表信息

File[] files = file.listFiles();

//将文件夹添加到下一级打包目录

out.putNextEntry(new ZipEntry(dir+"/"));

 

dir = dir.length() == 0 ? "" : dir +"/";

 

//循环将文件夹中的文件打包

for(int i = 0 ; i < files.length ; i++){

createCompressedFile(out, files[i], dir + files[i].getName());         //递归处理

}

}

else{   //当前的是文件,打包处理

//文件输入流

FileInputStream fis = new FileInputStream(file);

 

out.putNextEntry(new ZipEntry(dir));

//进行写操作

int j =  0;

byte[] buffer = new byte[1024];

while((j = fis.read(buffer)) > 0){

out.write(buffer,0,j);

}

//关闭输入流

fis.close();

}

}

 

 

 

 

 

 

 

 

public void excelExport(HttpServletResponse response, List dataList,

OutputStream out, Criteria criteria) throws Exception {

logger.info("进来了...");

List collist = new ArrayList();

PsbcClientFilterDataHeaderField headerField = null;

if (!criteria.getAsString("typeState").equals("0")) {

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("0");

headerField.setDataType("0");

headerField.setFieldsCode("client_name");

headerField.setFieldsName("姓名");

collist.add(headerField);

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("0");

headerField.setDataType("0");

headerField.setFieldsCode("sex");

headerField.setFieldsName("性别");

collist.add(headerField);

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("0");

headerField.setDataType("0");

headerField.setFieldsCode("age");

headerField.setFieldsName("年龄");

collist.add(headerField);

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("0");

headerField.setDataType("0");

headerField.setFieldsCode("phone_number");

headerField.setFieldsName("电话");

collist.add(headerField);

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("0");

headerField.setDataType("0");

headerField.setFieldsCode("address");

headerField.setFieldsName("地址");

collist.add(headerField);

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("3");

headerField.setDataType("0");

headerField.setFieldsCode("statis_date");

headerField.setFieldsName("统计日期");

collist.add(headerField);

headerField = new PsbcClientFilterDataHeaderField();

headerField.setDataFlag("3");

headerField.setDataType("0");

headerField.setFieldsCode("agency_num");

headerField.setFieldsName("机构编码");

collist.add(headerField);

 

} else {

collist = this.getHeadersList(criteria);

 

}

headerField = (PsbcClientFilterDataHeaderField) collist.get(0);

String names[] = headerField.getFieldsCode().split(",");

String[][] excelData = new String[dataList.size() + 1][collist.size() + 1];

for (int i = 0; i < collist.size(); i++) {

PsbcClientFilterDataHeaderField a = (PsbcClientFilterDataHeaderField) collist

.get(i);

excelData[0][i] = a.getFieldsName();

}

String dataStr = "";

if (dataList.size() > 0) {

for (int i = 0; i < dataList.size(); i++) {

Map rowMap = (Map) dataList.get(i);

for (int j = 0; j < collist.size(); j++) {

PsbcClientFilterDataHeaderField a = (PsbcClientFilterDataHeaderField) collist

.get(j);

if (null != rowMap.get(a.getFieldsCode().toUpperCase())) {

if (a.getDataType().equals("2")) {

 

Date dataD = (Date) rowMap.get(a.getFieldsCode()

.toUpperCase());

dataStr = (String) fmtDate.format(dataD);

}

 

else {

dataStr = rowMap.get(

a.getFieldsCode().toUpperCase()).toString();

}

} else {

dataStr = "";

}

excelData[(i + 1)][j] = String.valueOf(dataStr);

}

 

}

}

 

String fileName = "统计查询报表";

String excelName = "统计查询报表";

ExcelUtil

.seedReportExcel(response, fileName, excelName, excelData, out);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public static void seedReportExcel(HttpServletResponse response,

String filename, String sheetname, String exceldata[][],

OutputStream os) throws IOException {

 

HSSFWorkbook wb = new HSSFWorkbook(); // 创建工作本

HSSFSheet sheet = wb.createSheet(sheetname);

HSSFRow row;// =sheet.createRow(exceldata.length+1); //总行数多一行为表头

HSSFCellStyle cellStyle = wb.createCellStyle();

short rgb = 211;

cellStyle.setFillBackgroundColor(rgb);

 

// 颜色样式

HSSFCellStyle style = wb.createCellStyle();

style.setWrapText(true);

style.setFillForegroundColor((short) 31); // 44 31

style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

// 边框

style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

style.setBorderRight(HSSFCellStyle.BORDER_THIN);

style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

 

// 前3行及第一列按字符处理

// 循环画行

for (int l = 0; l < exceldata.length; l++) {

// 创建行

row = sheet.createRow((short) l);

// 循环画列

for (int i = 0; i < exceldata[0].length; i++) {

 

row.setHeight((short) 300); // 设置行高

sheet.setColumnWidth((short) i, (short) 5000);// 设计列宽

HSSFCell headerCell = row.createCell((short) i);

 

if (l < 1) {

headerCell.setCellStyle(style); // 表头设置样式

}

 

headerCell.setCellType(1);

headerCell.setCellValue(exceldata[l][i]);

 

}

}

sheet.setDisplayGridlines(true);// 显示网格线

sheet.setPrintGridlines(true);// 打印网格线

 

try {

wb.write(os);// 输出

} finally {

os.flush();

os.close();

}

}

分享到:
评论

相关推荐

    java动态大数据量EXCEL下载

    Java 动态大数据量EXCEL下载是一个常见的需求,在企业级应用中尤为常见,尤其是在数据分析、报表生成和数据导出场景下。以下是对这个主题的详细解释: 首先,我们需要理解Java如何处理大数据量的EXCEL文件。传统的...

    Java解析大数据量Excel,可解析1048576行excel

    在处理大数据量的Excel文件时,Java是一种常用的语言,因为它提供了强大的库,如Apache POI,使得解析大型Excel文件成为可能。Apache POI是Java的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel...

    Java读取大数据量Excel的方法(POI)

    在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...

    C# 大数据量快速导出到 Excel方法

    在C#编程中,将大数据量导出到Excel是一个常见的需求,特别是在数据分析、报表生成或者数据交换场景下。Microsoft.Office.Interop.Excel库是.NET Framework提供的一个用于与Microsoft Excel交互的COM接口,它允许...

    Java_批量导出大数据量Excel方法.zip

    本资料"Java_批量导出大数据量Excel方法.zip"包含两个关键文件:excelproj和ExpXLS,它们可能是项目的源代码或示例,用于演示如何实现这个功能。 1. **Apache POI库**: Apache POI是Java中广泛使用的库,用于读写...

    java poi 导入大数据量Excel数据 防止内存溢出处理.zip

    Java中的Apache POI库是用于读取和...通过以上策略,可以有效地处理Java POI在导入大数据量Excel时的内存溢出问题,同时提高程序的运行效率。在实践中,应根据具体场景选择合适的优化方法,确保程序的稳定性和性能。

    使用Poi读取大数据量excel的方法

    在Java开发中,Apache POI库是一个非常实用的工具,用于读取...总之,Apache POI结合SAX API为在Android上处理大数据量Excel文件提供了有效方案,通过合理配置和优化,可以显著降低内存消耗,提高应用的稳定性和效率。

    使用POI导出大数据量到EXCEL

    "使用POI导出大数据量到EXCEL"这个主题涉及到如何高效地利用POI处理大量数据并将其导出到Excel文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...

    处理大数据量excel

    这篇博文“处理大数据量excel”可能提供了针对这一问题的解决方案。博主分享了在处理大量数据时,如何利用编程工具和特定库来提升效率和性能。 首先,我们关注到标签中的“源码”和“工具”,这暗示了博主可能介绍...

    导出Excel 支持大数据量导出

    总结来说,使用jxl库进行大数据量Excel导出,关键在于合理分块、优化内存管理和充分利用异步处理。通过这些策略,即使面对大量数据,也能保证导出的效率和系统的稳定性。在实际开发中,还需要根据具体业务场景进行...

    读取大数据量的excel文件

    usermodel模式对excel操作前需要将文件全部转入内存,对较大文件来说内存开销很大。但是其使用简单。 eventusermodel模式采用事件模型,对文件边读取边处理,内存消耗较低,效率高,因为不用等待文件全部装入内存。...

    java导出30万数据量的excel(采用生成多个excel,最后打包zip)

    在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...

    (转)大数据量的excel文件读取——2003及之前版本(含代码及示例)

    在IT行业中,处理大数据量的Excel文件是一项常见的任务,特别是在数据分析、报表生成和数据导入导出等场景。本文主要探讨如何高效地读取2003及之前版本的Excel文件,这些版本通常采用.BIFF(Binary Interchange File...

    数据库大量数据导出Excel

    其次,在实验过程中,大数据量的导出很容易引发内存溢出,调整JVM的内存大小治标不治本。很多人建议保存为.CSV格式的文件。不过,.CSV方式导出也存在问题:首先,如果用excel来打开csv,超过65536行的数据都会看不见...

    解决poi大数据量导出excel的代码

    解决poi大数据量导出excel的代码,该代码中所用的jar包是poi3.9。在测试过程中单个sheet中导出20万数据没有问题。

    POI实现大数据量的excel文件解析

    标题中的“POI实现大数据量的excel文件解析”是指使用Apache POI库来处理大量数据的Excel文件。Apache POI是Java平台上的一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel(XLS和XLSX)...

    实现大数据量的excel文件解析POI

    解析大数据量Excel文件的核心挑战在于内存管理。一次性加载整个文件会导致内存溢出。为解决这个问题,Apache POI提供了Streaming Usermodel API(SXSSF)作为低内存消耗的解决方案。SXSSF不保存整个工作簿在内存中,...

    大数据量Excel07版表格文件导入时,快速有效读取数据工具类

    此工具类是基于Apache POI的用于读取大数据量Excel 07版后的表格文件,从而高效地读取到表格数据并以集合形式保存下来。 使用方式: List[]&gt; list = new ArrayList[]&gt;(); ExcelXlsxParser parser = new ...

    js前端Excel大数据处理导入

    本主题将深入探讨如何使用JavaScript来处理Excel文件,尤其是面对大数据量时的策略。 首先,我们需要了解JavaScript在浏览器环境中的限制,尤其是内存和执行时间限制。由于JavaScript运行在浏览器沙箱环境中,它不...

    从数据库将大量数据导出到Excel文件程序总结

    (一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条记录左右,我用的是Oracle数据库,要导入40万条数据。我主要采用了JXLS和POI的第...

Global site tag (gtag.js) - Google Analytics