`
刺眼的青春
  • 浏览: 5081 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类

excel导出报表,生成多个sheet,压缩excel文件夹,导出压缩文件

 
阅读更多
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();
}
}
1
0
分享到:
评论
1 楼 1927105 2011-10-17  
多写文字,少贴代码哈

相关推荐

    JavaScript 实现 Excel数据导出 支持多个Sheet页导出

    本文将深入探讨如何使用纯JavaScript实现JSON格式数据到Excel文件的导出,同时支持多个Sheet页的导出。这个功能对于前端开发者来说,能够极大地提升用户体验,特别是在数据管理、分析和分享场景下。 首先,我们要...

    导出excel多个sheet.zip

    这个"导出excel多个sheet.zip"压缩包文件可能包含了一个使用Delphi编写的示例或库,用于帮助开发者实现这一功能。下面将详细解释这个过程涉及的知识点。 1. Delphi简介:Delphi是一款集成开发环境(IDE),主要用于...

    kettle循环导出数据到excel生成多个sheet页

    在本场景中,我们讨论的是如何利用Kettle来实现一个特定的需求:循环导出数据到Excel并生成多个sheet页。 首先,我们需要理解这个需求的背景。在数据分析或报告生成中,有时需要根据不同的分类将数据分隔开,以便于...

    多个excel导出压缩成zip 文件 数据量大导出

    "多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...

    poi分多个sheet导出excel

    标题“poi分多个sheet导出excel”所指的就是如何使用POI库来动态地生成多个sheet,并根据设定的阈值(如50000条记录)进行切换。 首先,要使用Apache POI,你需要在项目中引入对应的依赖。如果你使用的是Maven,...

    导出Excel 一个Excel多个sheet

    在Excel中,一个工作簿(即我们通常所说的Excel文件)可以包含多个工作表,也就是...通过以上方法,我们可以灵活地管理和导出Excel中的多个Sheet,满足各种工作需求。熟练掌握这些技巧,能极大地提高Excel的使用效率。

    多个润乾报表,导出到一个excel中的不同sheet页中

    标题 "多个润乾报表,导出到一个excel中的不同sheet页中" 描述了一个常见的数据处理需求,即如何将多个独立的报表数据整合到一个Excel文件的不同工作表(sheet页)中。在IT行业中,这样的操作通常涉及到数据导出、多...

    C# NPOI导出多个Sheet页的Excel

    C# 用NPOI导出多个sheet页的Excel,sheet页名称可以自定义

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

    本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们打包成ZIP文件供用户下载。下面我们将详细探讨这一过程涉及的关键知识点。 1. **Java处理Excel**: Java中常用的库有Apache POI和...

    使用poi方式导出excel(分多个sheet导出)

    七、导出Excel文件 最后,将Workbook写入OutputStream或File,完成导出: ```java try (FileOutputStream out = new FileOutputStream("output.xlsx")) { workbook.write(out); } catch (IOException e) { e....

    poi多sheet页导出工具类和实例 包含多个excel导出

    总之,这个 poi 多 sheet 导出工具类和实例是处理大量数据导出的有效方法,结合合理的数据分组、公共数据获取类以及优化策略,可以高效地生成多个 sheet 或多个 Excel 文件,满足大规模数据的导出需求。

    海量千万级Excel导出源码-自动分sheet

    综上所述,"海量千万级Excel导出源码-自动分sheet"是一个高效、智能的解决方案,它利用XML格式规避了Excel的行限制,并通过自动分片策略解决了大数据导出的挑战。对于需要处理大量数据并生成Excel报告的项目,这是一...

    DEV GridControl GridView导出到Excel 支持多个Sheet 源码

    本文将详细探讨如何使用DEV GridControl的GridView组件将数据导出到Excel,并且支持将多个GridView导出到同一个Excel文件的不同Sheet中。这是一项实用的技术,能够帮助开发者提高工作效率,便于用户对大量数据进行...

    C# winform 导出datatable到excel的多个sheet

    使用C#实现了将多个datatable中的内容导出到 一个excel文件的不同的sheet页,每个sheet页对应一个datatable。代码中的datatable是程序中添加的内容,从数据库中导出数据到excel的话只需要将数据表内容写入datatable...

    vue实现多sheet页导出所需文件Export2Excel.js

    vue实现多sheet页导出所需文件Export2Excel.js

    Excel导出多个Sheet.rar

    此外,还有一些第三方软件或在线工具可以实现批量导出Excel Sheet的功能,如Kutools for Excel插件,它提供了一键导出所有Sheet为单个文件的便捷操作。 在"新建文本文档.txt"和"一个Excel导出多个Sheet"这两个文件...

    使用XML导出Excel,支持多个sheet zip压缩

    在IT行业中,XML(eXtensible Markup ...总结起来,使用XML导出Excel并支持多sheet及zip压缩,是解决大数据量处理的有效方法。通过编程手段,我们可以实现数据的高效管理和分发,同时保持数据的可读性和易用性。

    Java根据模板导出Excel报表并复制模板生成多个Sheet页

    Java根据模板导出Excel报表并复制模板生成多个Sheet页 本文主要介绍了Java根据模板导出Excel报表并复制模板生成多个Sheet页的方法,具有很好的参考价值。本工具类使用的场景为根据提供的模板来导出Excel报表并且可...

    .net NPOI导出EXCEL多个sheet

    当我们需要导出Excel文件并包含多个工作表(sheet)时,NPOI提供了强大的功能来实现这一需求。以下将详细介绍如何使用NPOI在.NET中导出包含多个sheet的Excel文件。 首先,我们需要了解NPOI的基本用法。NPOI主要通过...

    [二合一]C#读取和导出EXCEL类库(可操作多个SHEET)

    标题中的 "[二合一]C# 读取和导出 EXCEL 类库(可操作多个 SHEET)" 指的是一个 C# 开发的类库,它整合了读取和导出 Excel 文件的功能,并且能够方便地操作 Excel 文件中的多个工作表(Sheet)。这种类库在处理大量...

Global site tag (gtag.js) - Google Analytics