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文件。传统的...
在处理大数据量的Excel文件时,Java是一种常用的语言,因为它提供了强大的库,如Apache POI,使得解析大型Excel文件成为可能。Apache POI是Java的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel...
在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...
在C#编程中,将大数据量导出到Excel是一个常见的需求,特别是在数据分析、报表生成或者数据交换场景下。Microsoft.Office.Interop.Excel库是.NET Framework提供的一个用于与Microsoft Excel交互的COM接口,它允许...
本资料"Java_批量导出大数据量Excel方法.zip"包含两个关键文件:excelproj和ExpXLS,它们可能是项目的源代码或示例,用于演示如何实现这个功能。 1. **Apache POI库**: Apache POI是Java中广泛使用的库,用于读写...
Java中的Apache POI库是用于读取和...通过以上策略,可以有效地处理Java POI在导入大数据量Excel时的内存溢出问题,同时提高程序的运行效率。在实践中,应根据具体场景选择合适的优化方法,确保程序的稳定性和性能。
在Java开发中,Apache POI库是一个非常实用的工具,用于读取...总之,Apache POI结合SAX API为在Android上处理大数据量Excel文件提供了有效方案,通过合理配置和优化,可以显著降低内存消耗,提高应用的稳定性和效率。
"使用POI导出大数据量到EXCEL"这个主题涉及到如何高效地利用POI处理大量数据并将其导出到Excel文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...
这篇博文“处理大数据量excel”可能提供了针对这一问题的解决方案。博主分享了在处理大量数据时,如何利用编程工具和特定库来提升效率和性能。 首先,我们关注到标签中的“源码”和“工具”,这暗示了博主可能介绍...
总结来说,使用jxl库进行大数据量Excel导出,关键在于合理分块、优化内存管理和充分利用异步处理。通过这些策略,即使面对大量数据,也能保证导出的效率和系统的稳定性。在实际开发中,还需要根据具体业务场景进行...
usermodel模式对excel操作前需要将文件全部转入内存,对较大文件来说内存开销很大。但是其使用简单。 eventusermodel模式采用事件模型,对文件边读取边处理,内存消耗较低,效率高,因为不用等待文件全部装入内存。...
在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...
在IT行业中,处理大数据量的Excel文件是一项常见的任务,特别是在数据分析、报表生成和数据导入导出等场景。本文主要探讨如何高效地读取2003及之前版本的Excel文件,这些版本通常采用.BIFF(Binary Interchange File...
其次,在实验过程中,大数据量的导出很容易引发内存溢出,调整JVM的内存大小治标不治本。很多人建议保存为.CSV格式的文件。不过,.CSV方式导出也存在问题:首先,如果用excel来打开csv,超过65536行的数据都会看不见...
解决poi大数据量导出excel的代码,该代码中所用的jar包是poi3.9。在测试过程中单个sheet中导出20万数据没有问题。
标题中的“POI实现大数据量的excel文件解析”是指使用Apache POI库来处理大量数据的Excel文件。Apache POI是Java平台上的一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel(XLS和XLSX)...
解析大数据量Excel文件的核心挑战在于内存管理。一次性加载整个文件会导致内存溢出。为解决这个问题,Apache POI提供了Streaming Usermodel API(SXSSF)作为低内存消耗的解决方案。SXSSF不保存整个工作簿在内存中,...
此工具类是基于Apache POI的用于读取大数据量Excel 07版后的表格文件,从而高效地读取到表格数据并以集合形式保存下来。 使用方式: List[]> list = new ArrayList[]>(); ExcelXlsxParser parser = new ...
本主题将深入探讨如何使用JavaScript来处理Excel文件,尤其是面对大数据量时的策略。 首先,我们需要了解JavaScript在浏览器环境中的限制,尤其是内存和执行时间限制。由于JavaScript运行在浏览器沙箱环境中,它不...
(一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条记录左右,我用的是Oracle数据库,要导入40万条数据。我主要采用了JXLS和POI的第...