精华内容
下载资源
问答
  • JAVA导出exce大数据量发生OOM异常 一般来说出excel的方式,一种是poi方式的,一种是jxl方式的。这两种方式支持大量数据导出都有一定的问题,因此试图寻找一个新办法,找到了easyexcel easyexcel说明 1. 快速、...

    JAVA导出exce大数据量发生OOM异常

    一般来说出excel的方式,一种是poi方式的,一种是jxl方式的。这两种方式支持大量数据导出都有一定的问题,因此试图寻找一个新办法,找到了easyexcel

    easyexcel说明

    1. 快速、简单避免OOM的java处理Excel工具
    2. java解析、生成Excel比较有名的框架有Apache poi、jxl。
    3. 但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,
    4. 但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,
    5. 内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,
    6. 能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,
    7. 再大的excel不会出现内存溢出,03版依赖POI的sax模式。
    8. 在上层做了模型转换的封装,让使用者更加简单方便

    easyexcel示例


    如下是需要的一些包
    easyexcel-1.0.4.jar
    poi-ooxml-3.17.jar
    xmlbeans-2.6.0.jar
    commons-compress-1.14.jar
    poi-scratchpad-3.17.jar
    poi-ooxml-schemas-3.17.jar
    poi-excelant-3.17.jar
    poi-examples-3.17.jar
    poi-3.17.jar
    commons-collections4-4.1.jar

    代码实例

    public class ExcelTest extends UnitTest{
    	
    	
    	@org.junit.Test
    	public void writeExcelOneSheetOnceWrite() throws IOException {
    
    		// 生成EXCEL并指定输出路径
    		OutputStream out = new FileOutputStream("E:\\temp\\withoutHead1.xlsx");
    		ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX);
    
    		// 设置SHEET
    		Sheet sheet = new Sheet(1, 0);
    		sheet.setSheetName("sheet1");
    
    		// 设置标题
    		Table table = new Table(1);
    		List<List<String>> titles = new ArrayList<List<String>>();
    		titles.add(Arrays.asList("用户ID"));
    		titles.add(Arrays.asList("名称"));
    		titles.add(Arrays.asList("年龄"));
    		
    		
    		titles.add(Arrays.asList("张三1"));
    		titles.add(Arrays.asList("张三2"));
    		titles.add(Arrays.asList("张三3"));
    		titles.add(Arrays.asList("张三4"));
    		titles.add(Arrays.asList("张三5"));
    		titles.add(Arrays.asList("张三6"));
    		titles.add(Arrays.asList("张三7"));
    		titles.add(Arrays.asList("张三8"));
    		titles.add(Arrays.asList("张三9"));
    		titles.add(Arrays.asList("张三10"));
    		titles.add(Arrays.asList("张三11"));
    		titles.add(Arrays.asList("张三12"));
    		titles.add(Arrays.asList("张三13"));
    		titles.add(Arrays.asList("张三14"));
    		titles.add(Arrays.asList("张三15"));
    		titles.add(Arrays.asList("张三16"));
    		titles.add(Arrays.asList("张三17"));
    		titles.add(Arrays.asList("张三18"));
    		titles.add(Arrays.asList("张三19"));
    		titles.add(Arrays.asList("张三20"));
    		
    		titles.add(Arrays.asList("生日"));
    		table.setHead(titles);
    
    		// 查询数据导出即可 比如说一次性总共查询出100条数据
    		List<List<String>> userList = new ArrayList<>();
    		for (int i = 0; i < 100000; i++) {
    			userList.add(Arrays.asList("ID_" + i, 
    					"小明" + i, 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					String.valueOf(i), 
    					new Date().toString()));
    		}
    
    		writer.write0(userList, sheet, table);
    		writer.finish();
    
    	}

    思考问题的思路


    我们在做大数据导出的时候,需要考虑三个问题
    1. 数据库能不能撑住 查询大量数据对数据库是否造成困扰?
    2. java能不能撑住,你的对象拿出来,放到内存里,Java会不会困扰?
    3. 给excel导出数据,java操作excel的这个过程能不能撑住,它是否困扰?


    本文是为了解决第3个问题的。
    如果你的第1和第2问题,无法解决。
    导出大量数据excel仍然是导致问题的,比如cpu飚高,比如内存耗尽。


    还有更深一层次的哲学思想
    如果可能,不要导出excel,而要导出csv,然后自己转,因为csv快的多。
    当然产品经理可能会不满意,不过比起崩溃来,能用就是最基本原则。

    展开全文
  • 采用的是poi技术框架式 ssh 使用的是struts1/*** 导出联系人** @param request* @param response*/public void outExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse...

    采用的是poi技术

    框架式  ssh 使用的是struts1

    /*

    *

    * 导出联系人

    *

    * @param request

    * @param response

    */

    public void outExcel(ActionMapping mapping, ActionForm form,    HttpServletRequest request, HttpServletResponse response) {

    ServletContext servletContext = this.getServletContext();

    WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);

    TraceLxrService service = getTraceLxrService();

    List list = service.findAllQX();

    try {

    // 第一步,创建一个webbook,对应一个Excel文件

    HSSFWorkbook wb = new HSSFWorkbook();

    // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

    HSSFSheet sheet = wb.createSheet("区县工作小组名单");

    // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short

    HSSFRow row = sheet.createRow((int) 0);

    // 第四步,创建单元格,并设置值表头 设置表头居中

    HSSFCellStyle style = wb.createCellStyle();

    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

    // 创建一个居中格式       HSSFCell cell = row.createCell((short) 0);

    cell.setCellValue("区县");

    cell.setCellStyle(style);

    cell = row.createCell((short) 1);

    cell.setCellValue("分工");

    cell.setCellStyle(style);

    cell = row.createCell((short) 2);

    cell.setCellValue("姓名");

    cell.setCellStyle(style);

    cell = row.createCell((short) 3);

    cell.setCellValue("部门");

    cell.setCellStyle(style);

    cell = row.createCell((short) 4);

    cell.setCellValue("职务");

    cell.setCellStyle(style);

    cell = row.createCell((short) 5);

    cell.setCellValue("电话");

    cell.setCellStyle(style);

    cell = row.createCell((short) 6);

    cell.setCellValue("手机");

    cell.setCellStyle(style);

    cell = row.createCell((short) 7);

    cell.setCellValue("传真");

    cell.setCellStyle(style);

    cell = row.createCell((short) 8);

    cell.setCellValue("Email");

    cell.setCellStyle(style);

    cell = row.createCell((short) 9);

    cell.setCellValue("修改");

    cell.setCellStyle(style);

    cell = row.createCell((short) 10);

    cell.setCellValue("删除");

    cell.setCellStyle(style);

    List newlist=new ArrayList();

    List list1 = service.findAllQXDz();

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

    for (int p = 0; p < list.size(); p++) {

    if(list1.get(i).equals(list.get(p).getSsqx())){

    TraceLxr sf=new TraceLxr();

    sf.setSsqx(list.get(p).getSsqx());

    sf.setFg(list.get(p).getFg());

    sf.setName(list.get(p).getName());

    sf.setDept(list.get(p).getDept());

    sf.setJob(list.get(p).getJob());

    sf.setTel(list.get(p).getTel());

    sf.setMobile(list.get(p).getMobile());

    sf.setFax(list.get(p).getFax());

    sf.setEmail(list.get(p).getEmail());

    sf.setDelflag("修改");

    sf.setDelflag("删除");

    newlist.add(sf);

    }

    }

    }

    for (int k1 = 0; k1 < newlist.size(); k1++) {

    row = sheet.createRow((int) k1 + 1);

    TraceLxr bgMultiLevel = (TraceLxr) newlist.get(k1);

    row.createCell((short) 0).setCellValue(bgMultiLevel.getSsqx());

    row.createCell((short) 1).setCellValue(bgMultiLevel.getFg());

    row.createCell((short) 2).setCellValue(bgMultiLevel.getName());

    row.createCell((short) 3).setCellValue(bgMultiLevel.getDept());

    row.createCell((short) 4).setCellValue(bgMultiLevel.getJob());

    row.createCell((short) 5).setCellValue(bgMultiLevel.getTel());

    row.createCell((short) 6).setCellValue(bgMultiLevel.getMobile());

    row.createCell((short) 7).setCellValue(bgMultiLevel.getFax());

    row.createCell((short) 8).setCellValue(bgMultiLevel.getEmail());

    row.createCell((short) 9).setCellValue("0");

    row.createCell((short) 10).setCellValue("1");

    if(k1!=0){

    if(newlist.get(k1-1).getSsqx().equals(newlist.get(k1).getSsqx())){

    //重点在这里动态合并

    CellRangeAddress cra=new CellRangeAddress(k1, 1+k1, 0, 0);

    //在sheet里增加合并单元格

    sheet.addMergedRegion(cra);

    }

    }

    }

    response.reset();

    response.setContentType("application/vnd.ms-excel;charset=utf-8");

    response.setHeader("Content-Disposition", "attachment;filename=" + new String(("exportExcel".toString() + ".xls").getBytes(), "iso-8859-1"));

    OutputStream os = response.getOutputStream();

    wb.write(os);    os.close();

    }catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    展开全文
  • 采用的是poi技术 框架式 ssh 使用的是struts1 ...* 导出联系人 * * @param request * @param response */ public void outExcel(ActionMapping mapping, ActionForm form, HttpServletRequest request...

    采用的是poi技术

    框架式  ssh 使用的是struts1

     

     

    /*

    *  

    * 导出联系人  

    *  

    * @param request  

    * @param response

      */

     public void outExcel(ActionMapping mapping, ActionForm form,    HttpServletRequest request, HttpServletResponse response) {  

     ServletContext servletContext = this.getServletContext();  

     WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);   

    TraceLxrService service = getTraceLxrService();  

     List<AbstractTraceLxr> list = service.findAllQX();

      

      try {

       // 第一步,创建一个webbook,对应一个Excel文件

       HSSFWorkbook wb = new HSSFWorkbook();

       // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  

      HSSFSheet sheet = wb.createSheet("区县工作小组名单");

       // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short

       HSSFRow row = sheet.createRow((int) 0);  

      // 第四步,创建单元格,并设置值表头 设置表头居中  

      HSSFCellStyle style = wb.createCellStyle();   

     style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

    // 创建一个居中格式       HSSFCell cell = row.createCell((short) 0);  

        cell.setCellValue("区县");  

        cell.setCellStyle(style);

       cell = row.createCell((short) 1);  

        cell.setCellValue("分工");

        cell.setCellStyle(style);  

       cell = row.createCell((short) 2);   

       cell.setCellValue("姓名");   

       cell.setCellStyle(style);

       cell = row.createCell((short) 3);  

      cell.setCellValue("部门");  

      cell.setCellStyle(style);

       cell = row.createCell((short) 4);  

      cell.setCellValue("职务");  

      cell.setCellStyle(style);

       cell = row.createCell((short) 5);  

      cell.setCellValue("电话");  

      cell.setCellStyle(style);

       cell = row.createCell((short) 6);  

      cell.setCellValue("手机");  

      cell.setCellStyle(style);

       cell = row.createCell((short) 7);   

       cell.setCellValue("传真");   

       cell.setCellStyle(style);

       cell = row.createCell((short) 8);  

       cell.setCellValue("Email");   

       cell.setCellStyle(style);

       cell = row.createCell((short) 9);

       cell.setCellValue("修改");   

       cell.setCellStyle(style);

       cell = row.createCell((short) 10);

       cell.setCellValue("删除");  

       cell.setCellStyle(style);        

              List<AbstractTraceLxr> newlist=new ArrayList<AbstractTraceLxr>();

              List<String> list1 = service.findAllQXDz();     

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

               for (int p = 0; p < list.size(); p++) {     

               if(list1.get(i).equals(list.get(p).getSsqx())){    

               TraceLxr sf=new TraceLxr();     

          sf.setSsqx(list.get(p).getSsqx());       

          sf.setFg(list.get(p).getFg());       

          sf.setName(list.get(p).getName());

          sf.setDept(list.get(p).getDept());    

          sf.setJob(list.get(p).getJob());    

          sf.setTel(list.get(p).getTel());     

          sf.setMobile(list.get(p).getMobile());    

          sf.setFax(list.get(p).getFax());     

          sf.setEmail(list.get(p).getEmail());  

          sf.setDelflag("修改");     

          sf.setDelflag("删除");  

          newlist.add(sf);     

       }      

      }    

      }     

           for (int k1 = 0; k1 < newlist.size(); k1++) {   

           row = sheet.createRow((int) k1 + 1);  

          TraceLxr bgMultiLevel = (TraceLxr) newlist.get(k1);

          row.createCell((short) 0).setCellValue(bgMultiLevel.getSsqx());    

          row.createCell((short) 1).setCellValue(bgMultiLevel.getFg());   

          row.createCell((short) 2).setCellValue(bgMultiLevel.getName());    

          row.createCell((short) 3).setCellValue(bgMultiLevel.getDept());   

          row.createCell((short) 4).setCellValue(bgMultiLevel.getJob());

          row.createCell((short) 5).setCellValue(bgMultiLevel.getTel());  

          row.createCell((short) 6).setCellValue(bgMultiLevel.getMobile());

          row.createCell((short) 7).setCellValue(bgMultiLevel.getFax());   

          row.createCell((short) 8).setCellValue(bgMultiLevel.getEmail());  

          row.createCell((short) 9).setCellValue("0");    

          row.createCell((short) 10).setCellValue("1");  

        if(k1!=0){        

        if(newlist.get(k1-1).getSsqx().equals(newlist.get(k1).getSsqx())){    

           //重点在这里动态合并

              CellRangeAddress cra=new CellRangeAddress(k1, 1+k1, 0, 0);      

                         //在sheet里增加合并单元格           

              sheet.addMergedRegion(cra);        

               }              

         }    

    }       

       response.reset();   

       response.setContentType("application/vnd.ms-excel;charset=utf-8");  

      response.setHeader("Content-Disposition", "attachment;filename=" + new String(("exportExcel".toString() + ".xls").getBytes(), "iso-8859-1"));

       OutputStream os = response.getOutputStream();   

        wb.write(os);    os.close();      

        }catch (IOException e) {  

      // TODO Auto-generated catch block  

      e.printStackTrace();

         }

     }

    转载于:https://www.cnblogs.com/liuy1/p/5672898.html

    展开全文
  • 展开全部java导出Excel需要用到poi的jar包,//第一步,创建一个webbook,对应32313133353236313431303231363533e78988e69d8331333337623464一个Excel文件HSSFWorkbookwb=newHSSFWorkbook();//第二步,在webbook中...

    展开全部

    java导出Excel需要用到poi的jar包,// 第一步,创建一个webbook,对应32313133353236313431303231363533e78988e69d8331333337623464一个Excel文件

    HSSFWorkbook wb = new HSSFWorkbook();

    // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

    HSSFSheet sheet = wb.createSheet("学生表一");

    // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short

    HSSFRow row = sheet.createRow((int) 0);

    // 第四步,创建单元格,并设置值表头 设置表头居中

    HSSFCellStyle style = wb.createCellStyle();

    style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

    HSSFCell cell = row.createCell((short) 0);

    cell.setCellValue("学号");

    cell.setCellStyle(style);

    cell = row.createCell((short) 1);

    cell.setCellValue("姓名");

    cell.setCellStyle(style);

    cell = row.createCell((short) 2);

    cell.setCellValue("年龄");

    cell.setCellStyle(style);

    cell = row.createCell((short) 3);

    cell.setCellValue("生日");

    cell.setCellStyle(style);

    // 第五步,写入实体数据 实际应用中这些数据从数据库得到,

    List list = CreateSimpleExcelToDisk.getStudent();

    for (int i = 0; i 

    {

    row = sheet.createRow((int) i + 1);

    Student stu = (Student) list.get(i);

    // 第四步,创建单元格,并设置值

    row.createCell((short) 0).setCellValue((double) stu.getId());

    row.createCell((short) 1).setCellValue(stu.getName());

    row.createCell((short) 2).setCellValue((double) stu.getAge());

    cell = row.createCell((short) 3);

    cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu

    .getBirth()));

    }

    // 第六步,将文件存到指定位置

    try

    {

    FileOutputStream fout = new FileOutputStream("E:/students.xls");

    wb.write(fout);

    fout.close();

    }

    catch (Exception e)

    {

    e.printStackTrace();

    }

    }

    展开全文
  • 导出功能所依赖的jar包4.撸代码异常状态码类(ErrorCode)5.撸代码异常类(DCPException类)6.返回前端提示类(ReturnValue)7.撸代码控制器层(Controller类)8.文件资源存放地址类(FileResource)9.撸代码逻辑层(Test...
  • poi 模版 导出exce

    2017-02-20 14:57:07
    package com.grgbanking.zxyh.business; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java
  • // 1.创建一个webbook,对应一个Excel文件 ...//如果导出一个sheet的话就不用for循环了 String[] actionarr = {"0","1","2","3"}; for(int i = 0; i // 2.创建sheet String sheetName = "";
  • java exce数据导入导出

    2013-12-30 10:03:00
    包含:一个jar包,一个java源代码。List[]> filepath
  • 产品经理需要导出一个页面的所有的信息到 EXCEL 文件。 需求分析 对于 excel 导出,是一个很常见的需求。 最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。 客户体验 & 服务性能 客户体验 如果...
  • /*** *@FileName:ExcelFillCellMergeStrategy.java* *@creatorlee* *@dateDec 28, 2020** @editor *@Description:* *@versionV1.0**/importcom.alibaba.excel.metadata.CellData;importcom.alibaba.exce...
  • 产品需求产品经理需要导出一个页面的所有的信息到 EXCEL 文件。需求分析对于 excel 导出,是一个很常见的需求。最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。客户体验 & 服务性能客户体验如果...
  • 产品经理需要导出一个页面的所有的信息到 EXCEL 文件。需求分析对于 excel 导出,是一个很常见的需求。最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。客户体验 & 服务性能客户体验如果导出的文件...
  • java poi导出Excel

    2018-12-27 14:37:30
    java数据导出Exce的一个小案例 包括表格等样式 ,简单表格,复杂表格。特别清晰,简单易懂
  • java导入导出excel

    2018-03-29 13:56:07
    java 导入exce 导出excel 这里面分别一个几个方式的导入导出集合
  • 1.导入相关依赖org.apache.poipoi3.17org...创建测试.exce 3.编码public static void main(String[] args) throws IOException {//先从桌面读取 然后输出List areaList = importXLS();exportExcel2(areaList);}//从e...
  • 首先需求是用户提出导出excel数据需使用水印备注其用途;其实就是在导出excel的同时带有自定义文字水印的导出。那么我们首先想到的肯定是以一个什么样的思路去...那么既然图片可以添加文字水印,可能就可以想到exce...
  • java_excel

    2012-02-13 20:51:18
    java导出exce实例
  • 业务场景先描述一下业务场景,要实现的功能是通过搜索框填写参数,然后点击按钮搜索数据,将搜索框的查询参数获取,附加在链接后面,调导Excel表接口,然后实现导出...导致查询条件失效,不能按查询条件导出Exce...
  • java 导出excel

    2015-07-09 16:45:51
    * @param fileName EXCEL文件名称 * @param listTitle EXCEL文件第一行列标题集合 * @param listContent EXCE
  • java导出PDF文件

    2015-02-04 21:43:36
    package com.exce; import java.awt.Color; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import jav

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

java导出exce

java 订阅