public void doExport(OutputStream out) throws JspException
{
try
{
out = toExcel(out);
HSSFWorkbook wb = new HSSFWorkbook();//下面注释为单个sheet,就是只有一个excel文件及一个sheet,小数据量则可以直接使用下面注释代码。
// sheet = wb.createSheet("sheet1");
//
// int rowNum = 0;
// int colNum = 0;
//
// if (this.header)
// {
// // Create an header row
// HSSFRow xlsRow = sheet.createRow(rowNum++);
//
// HSSFCellStyle headerStyle = wb.createCellStyle();
// headerStyle.setFillPattern(HSSFCellStyle.FINE_DOTS);
// headerStyle.setFillBackgroundColor(HSSFColor.BLUE_GREY.index);
// HSSFFont bold = wb.createFont();
// bold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// bold.setColor(HSSFColor.WHITE.index);
// headerStyle.setFont(bold);
//
// Iterator iterator = this.model.getHeaderCellList().iterator();
//
// while (iterator.hasNext())
// {
// HeaderCell headerCell = (HeaderCell) iterator.next();
//
// String columnHeader = headerCell.getTitle();
//
// if (columnHeader == null){
// columnHeader = StringUtils.capitalize(headerCell.getBeanPropertyName());
// }
// if(StringUtils.isNotEmpty(columnHeader)){
// HSSFCell cell = xlsRow.createCell((short) colNum++);
// //set a string value for the cell. Please note that if you are using full 16 bit unicode you should call setEncoding() first.
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// cell.setCellValue(escapeColumnValue(columnHeader));
// cell.setCellStyle(headerStyle);
// }
// }
// }
//
// // get the correct iterator (full or partial list according to the exportFull field)
// RowIterator rowIterator = this.model.getRowIterator(this.exportFull);
// // iterator on rows
//
// while (rowIterator.hasNext())
// {
// Row row = rowIterator.next();
// HSSFRow xlsRow = sheet.createRow(rowNum++);
// colNum = 0;
//
// // iterator on columns
// ColumnIterator columnIterator = row.getColumnIterator(this.model.getHeaderCellList());
//
// while (columnIterator.hasNext())
// {
// Column column = columnIterator.nextColumn();
// // Get the value to be displayed for the column
// Object value = column.getValue(this.decorated);
// String tile=column.getHeaderCell().getTitle();
// if(StringUtils.isNotEmpty(tile)){
// HSSFCell cell = xlsRow.createCell((short) colNum++);
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// cell.setCellValue(escapeColumnValue(value));
// }
// }
// }
wb.write(out);
out.close();
Thread.sleep(3000);
File files = new File("D:/exportData");
//压缩后,删除原有文件
deleteFile(files);
}
catch (Exception e)
{
throw new ExcelGenerationException(e);
}
}
private void deleteFile(File file){
if(file.exists()){
if(file.isFile()){
file.delete();
}else if(file.isDirectory()){
File files[] = file.listFiles();
for(int i=0;i<files.length;i++){
this.deleteFile(files[i]);
}
}
file.delete();
}else{
System.out.println("所删除的文件不存在!"+'\n');
}
}
public OutputStream toExcel(OutputStream out) throws Exception {
WritableWorkbook wwb = null;
BufferedOutputStream output = new BufferedOutputStream(out);
String fileName = DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH_mm_ss_sss")+".xls";
fileName = new String(fileName.getBytes("gb2312"), "ISO-8859-1");
String os = System.getProperty("os.name").toLowerCase();
String fileDir = "";
if(os.startsWith("windows")){
//windows system
fileDir ="D:/exportData";
}else{
//unix
fileDir = "/exportData";
}
File directory = new File(fileDir);
if(directory.exists())
{
}
else
{
directory.mkdirs();
}
File file = new File(directory.getPath()+"/" + fileName);
if(!file.exists())
{
file.createNewFile();
}
// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(file);
int s = 0;
if (wwb != null) {
RowIterator rowIterator = this.model.getRowIterator(this.exportFull);
while(s++<sheetTotal && rowIterator.hasNext() )
{
// 创建一个可写入的工作表
// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet"+s, s);
if (this.header)
{
Iterator iterator = this.model.getHeaderCellList().iterator();
int j = 0;
while (iterator.hasNext())
{
HeaderCell headerCell = (HeaderCell) iterator.next();
String columnHeader = headerCell.getTitle();
if (columnHeader == null)
{
columnHeader = StringUtils.capitalize(headerCell.getBeanPropertyName());
}
if(StringUtils.isNotEmpty(columnHeader))
{
ws.addCell(new Label(j, 0, escapeColumnValue(columnHeader)));
}
j++;
}
}
int i = 1;
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
int k = 0;//下面则是迭代报表数据,具体数据获取则根据自己项目框架,此处压缩类为ant.jar下面的类,360压缩不可以,会导致路径不正确。
ColumnIterator columnIterator = row.getColumnIterator(this.model.getHeaderCellList());
while (columnIterator.hasNext())
{
Column column = columnIterator.nextColumn();
// Get the value to be displayed for the column
Object value = column.getValue(this.decorated);
String tile=column.getHeaderCell().getTitle();
if(StringUtils.isNotEmpty(tile))
{
ws.addCell(new Label(k++, i, escapeColumnValue(value)));
}
}
i++;
if(i>9)
{
break;
}
}
}
}
// 从内存中写入文件中
wwb.write();
// 关闭资源,释放内存
wwb.close();
//TODO zip
zip(directory.getPath()+".zip",new File(directory.getPath()));
//to page
BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File(directory.getPath()+".zip")));
// FileUtils.;
byte[] b = new byte[30080];
int ii;
while((ii = in.read(b)) != -1)
{
output.write(b, 0, ii);
}
in.close();
new File(directory.getPath()+".zip").delete();
return output;
}
private void zip(String zipFileName,File inputFile)throws Exception
{
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFileName));
zip(zipOut,inputFile,"");
zipOut.close();
}
private void zip(ZipOutputStream out ,File f,String base)throws Exception
{
if(f.isDirectory())
{
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ?"":base+"/";
for(int i = 0 ; i < fl.length; i++)
{
zip(out,fl[i],base+fl[i]);
}
}else
{
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b ;
System.out.println(base);
while((b = in.read())!=-1)
{
out.write(b);
}
in.close();
}
}
分享到:
相关推荐
本文将深入探讨如何使用纯JavaScript实现JSON格式数据到Excel文件的导出,同时支持多个Sheet页的导出。这个功能对于前端开发者来说,能够极大地提升用户体验,特别是在数据管理、分析和分享场景下。 首先,我们要...
这个"导出excel多个sheet.zip"压缩包文件可能包含了一个使用Delphi编写的示例或库,用于帮助开发者实现这一功能。下面将详细解释这个过程涉及的知识点。 1. Delphi简介:Delphi是一款集成开发环境(IDE),主要用于...
在本场景中,我们讨论的是如何利用Kettle来实现一个特定的需求:循环导出数据到Excel并生成多个sheet页。 首先,我们需要理解这个需求的背景。在数据分析或报告生成中,有时需要根据不同的分类将数据分隔开,以便于...
"多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...
标题“poi分多个sheet导出excel”所指的就是如何使用POI库来动态地生成多个sheet,并根据设定的阈值(如50000条记录)进行切换。 首先,要使用Apache POI,你需要在项目中引入对应的依赖。如果你使用的是Maven,...
在Excel中,一个工作簿(即我们通常所说的Excel文件)可以包含多个工作表,也就是...通过以上方法,我们可以灵活地管理和导出Excel中的多个Sheet,满足各种工作需求。熟练掌握这些技巧,能极大地提高Excel的使用效率。
标题 "多个润乾报表,导出到一个excel中的不同sheet页中" 描述了一个常见的数据处理需求,即如何将多个独立的报表数据整合到一个Excel文件的不同工作表(sheet页)中。在IT行业中,这样的操作通常涉及到数据导出、多...
C# 用NPOI导出多个sheet页的Excel,sheet页名称可以自定义
本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们打包成ZIP文件供用户下载。下面我们将详细探讨这一过程涉及的关键知识点。 1. **Java处理Excel**: Java中常用的库有Apache POI和...
七、导出Excel文件 最后,将Workbook写入OutputStream或File,完成导出: ```java try (FileOutputStream out = new FileOutputStream("output.xlsx")) { workbook.write(out); } catch (IOException e) { e....
总之,这个 poi 多 sheet 导出工具类和实例是处理大量数据导出的有效方法,结合合理的数据分组、公共数据获取类以及优化策略,可以高效地生成多个 sheet 或多个 Excel 文件,满足大规模数据的导出需求。
综上所述,"海量千万级Excel导出源码-自动分sheet"是一个高效、智能的解决方案,它利用XML格式规避了Excel的行限制,并通过自动分片策略解决了大数据导出的挑战。对于需要处理大量数据并生成Excel报告的项目,这是一...
本文将详细探讨如何使用DEV GridControl的GridView组件将数据导出到Excel,并且支持将多个GridView导出到同一个Excel文件的不同Sheet中。这是一项实用的技术,能够帮助开发者提高工作效率,便于用户对大量数据进行...
使用C#实现了将多个datatable中的内容导出到 一个excel文件的不同的sheet页,每个sheet页对应一个datatable。代码中的datatable是程序中添加的内容,从数据库中导出数据到excel的话只需要将数据表内容写入datatable...
vue实现多sheet页导出所需文件Export2Excel.js
此外,还有一些第三方软件或在线工具可以实现批量导出Excel Sheet的功能,如Kutools for Excel插件,它提供了一键导出所有Sheet为单个文件的便捷操作。 在"新建文本文档.txt"和"一个Excel导出多个Sheet"这两个文件...
在IT行业中,XML(eXtensible Markup ...总结起来,使用XML导出Excel并支持多sheet及zip压缩,是解决大数据量处理的有效方法。通过编程手段,我们可以实现数据的高效管理和分发,同时保持数据的可读性和易用性。
Java根据模板导出Excel报表并复制模板生成多个Sheet页 本文主要介绍了Java根据模板导出Excel报表并复制模板生成多个Sheet页的方法,具有很好的参考价值。本工具类使用的场景为根据提供的模板来导出Excel报表并且可...
当我们需要导出Excel文件并包含多个工作表(sheet)时,NPOI提供了强大的功能来实现这一需求。以下将详细介绍如何使用NPOI在.NET中导出包含多个sheet的Excel文件。 首先,我们需要了解NPOI的基本用法。NPOI主要通过...
标题中的 "[二合一]C# 读取和导出 EXCEL 类库(可操作多个 SHEET)" 指的是一个 C# 开发的类库,它整合了读取和导出 Excel 文件的功能,并且能够方便地操作 Excel 文件中的多个工作表(Sheet)。这种类库在处理大量...