首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

POI 集锦、总结帖

2012-09-12 
POI 汇总、总结帖最近工作需求使用POI,使用场景如下:1、查询数据库获取数据2、按照客户要求格式导出成excel?

POI 汇总、总结帖

最近工作需求使用POI,使用场景如下:

1、查询数据库获取数据

2、按照客户要求格式导出成excel

?

碰到的几个问题:

1、POI的基本操作

2、客户的有格式要求,还比较复杂

?

问题一参见:

POI操作Excel文档-基础篇?http://llyzq.iteye.com/admin/blogs/1354542

POI操作Excel文档-中级篇?http://llyzq.iteye.com/admin/blogs/1354545

Apache POI ?http://llyzq.iteye.com/admin/blogs/729521

?

问题二的解决思路:

1、将客户提供的excel作为样式模板

2、读取该excel创建HSSFWorkbook对象

3、填充数据

4、对于需要纵向扩充的表格数据,使用sheet.shiftRows方法实现,同时复杂样式和合并单元格

?

/**   * 复制一行的单元格样式   */  private void copyCellStyleOfRow(HSSFSheet sheet,HSSFRow fromRow,HSSFRow toRow,int count){  for (int i = 0; i < count; i++) {  if(toRow.getCell((short)i) != null)  toRow.getCell((short)i).setCellStyle(fromRow.getCell((short)i).getCellStyle());  else{  toRow.createCell((short)i).setCellStyle(fromRow.getCell((short)i).getCellStyle());  }          for (int j = 0; j < sheet.getNumMergedRegions(); j++) {        Region r = sheet.getMergedRegionAt(j);        //判断是否包含在合并表格中        if (r.contains(fromRow.getRowNum(), (short)i)) {        sheet.addMergedRegion(new Region(toRow.getRowNum(), r.getColumnFrom(), toRow.getRowNum(), r.getColumnTo()));        }    }}  }

?

其他主要代码:

?

protected ActionForward doPrev(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {        ITenpayQuetyService tenpayQueryServiceImpl=(ITenpayQuetyService)ApplicationContextUtil.getInstance().getBean("tenpayQueryServiceImpl");        try {                String begDate = request.getParameter("begDate").replaceAll("-", "");      String endDate = request.getParameter("endDate").replaceAll("-", "");      Map params = new HashMap();      params.put("begDate", begDate);      params.put("endDate", endDate);      params.put("broke", "TENPAY");            //读取excel模板      String urlpath = request.getRealPath("");      HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(urlpath + "\\template\" + HsDictionary.getInstance().getSysParameter("SALE", "SYSTEMPLATE")+"\\custom\\tenpaydemo.xls"));      HSSFSheet s = wb.getSheetAt(0);            DecimalFormat format = new DecimalFormat("###,##0.00");        //--------------汇总报表      //统计周期      String tjzq = request.getParameter("begDate").replaceAll("-", ".")+" -- "      +request.getParameter("endDate").replaceAll("-", ".");      int hs = 0;//户数      int cggmkhs = 0;//成功购买客户数      double zb = 100;//占比      int csgmkhs = 0;//尝试购买客户数      int cssgbs = 0;//尝试申购笔数      int cgsgbs = 0;//成功申购笔数      double cgsgje = 0;//成功申购金额      int csrgbs = 0;//尝试认购笔数      int cgrgbs = 0;//成功认购笔数      double cgrgje = 0;//成功认购金额      int dtcskkbs = 0;//定投尝试扣款笔数      int dtcgkkbs = 0;//定投成功扣款笔数      double dtcgkkje = 0;//定投成功扣款金额            HsRowSet rowSet = tenpayQueryServiceImpl.getTenpayNewOpenSuccessTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0)      cggmkhs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();            rowSet = tenpayQueryServiceImpl.getTenpaySuccessOpenStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0)      hs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();            rowSet = tenpayQueryServiceImpl.getTenpayNewOpenTryTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0)      csgmkhs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();            if(hs != 0)      zb = cggmkhs/hs;      //申购      params.put("businflag", "022");      rowSet = tenpayQueryServiceImpl.getTenpayTryTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0)      cssgbs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();            rowSet = tenpayQueryServiceImpl.getTenpaySuccessTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0){      cgsgbs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();      cgsgje = Double.valueOf(((String)rowSet.getInterfaceProperty(0,"confirmbala"))).doubleValue();      }            //认购      params.put("businflag", "020");      rowSet = tenpayQueryServiceImpl.getTenpayTryTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0)      csrgbs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();            rowSet = tenpayQueryServiceImpl.getTenpaySuccessTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0){      cgrgbs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();      cgrgje = Double.valueOf(((String)rowSet.getInterfaceProperty(0,"confirmbala"))).doubleValue();      }            //定投      params.put("businflag", "039");      rowSet = tenpayQueryServiceImpl.getTenpayTryTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0)      dtcskkbs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();            rowSet = tenpayQueryServiceImpl.getTenpaySuccessTradeStatic(this.getPkgId(request), params);      if(rowSet.getReturnRecords() > 0){      dtcgkkbs = Integer.valueOf(((String)rowSet.getInterfaceProperty(0,"count"))).intValue();      dtcgkkje = Double.valueOf(((String)rowSet.getInterfaceProperty(0,"confirmbala"))).doubleValue();      }            //填充excel      HSSFRow row = s.getRow(6);            row.getCell((short)0).setCellValue(new HSSFRichTextString(tjzq));      row.getCell((short)1).setCellValue(new HSSFRichTextString(String.valueOf(hs)));      row.getCell((short)2).setCellValue(new HSSFRichTextString(String.valueOf(cggmkhs)));      row.getCell((short)3).setCellValue(new HSSFRichTextString(String.valueOf(zb)+"%"));      row.getCell((short)4).setCellValue(new HSSFRichTextString(String.valueOf(csgmkhs)));      row.getCell((short)5).setCellValue(new HSSFRichTextString(String.valueOf(cssgbs)));      row.getCell((short)6).setCellValue(new HSSFRichTextString(String.valueOf(cgsgbs)));      row.getCell((short)7).setCellValue(new HSSFRichTextString(format.format(cgsgje)));      row.getCell((short)8).setCellValue(new HSSFRichTextString(String.valueOf(csrgbs)));      row.getCell((short)9).setCellValue(new HSSFRichTextString(String.valueOf(cgrgbs)));      row.getCell((short)10).setCellValue(new HSSFRichTextString(format.format(cgrgje)));      row.getCell((short)11).setCellValue(new HSSFRichTextString(String.valueOf(dtcskkbs)));      row.getCell((short)12).setCellValue(new HSSFRichTextString(String.valueOf(dtcgkkbs)));      row.getCell((short)13).setCellValue(new HSSFRichTextString(format.format(dtcgkkje)));                    //------------新开户报表---------------              HsRowSet newOpenList = tenpayQueryServiceImpl.getTenpayNewOpenList(this.getPkgId(request),params);      request.setAttribute("begDate",begDate);          request.setAttribute("endDate",endDate);          request.setAttribute("newOpenList",newOpenList);                    //填充excel          row = s.getRow(10);          for (int i = 0; i < newOpenList.getReturnRecords(); i++) {          row.getCell((short)0).setCellValue(new HSSFRichTextString(newOpenList.getInterfaceProperty(i,"date")));          row.getCell((short)1).setCellValue(new HSSFRichTextString(newOpenList.getInterfaceProperty(i,"partneraccoid")));          row.getCell((short)5).setCellValue(new HSSFRichTextString(newOpenList.getInterfaceProperty(i,"time")));          row.getCell((short)6).setCellValue(new HSSFRichTextString(newOpenList.getInterfaceProperty(i,"type")));          if(i != newOpenList.getReturnRecords()-1){          s.shiftRows(row.getRowNum()+1, row.getRowNum()+8, 1);          this.copyCellStyleOfRow(s,row, s.getRow(row.getRowNum()+1), 7);          row=s.getRow(row.getRowNum()+1);          }          }          row=s.getRow(row.getRowNum()+1);          row.getCell((short)0).setCellValue(new HSSFRichTextString("共"+newOpenList.getReturnRecords()+"条记录"));                          //---------------交易详细报表------------------------        HsRowSet dealDetailList = tenpayQueryServiceImpl.getTenpayDealDetailList(this.getPkgId(request),params);                //填充excel        row=s.getRow(row.getRowNum()+4);        for (int i = 0; i < dealDetailList.getReturnRecords(); i++) {        row.getCell((short)0).setCellValue(new HSSFRichTextString(dealDetailList.getInterfaceProperty(i,"partneraccoid")));        row.getCell((short)1).setCellValue(new HSSFRichTextString(dealDetailList.getInterfaceProperty(i,"date")));        row.getCell((short)3).setCellValue(new HSSFRichTextString(dealDetailList.getInterfaceProperty(i,"time")));        row.getCell((short)5).setCellValue(new HSSFRichTextString(dealDetailList.getInterfaceProperty(i,"fundcode")));        row.getCell((short)7).setCellValue(new HSSFRichTextString(dealDetailList.getInterfaceProperty(i,"fundtype")));        row.getCell((short)8).setCellValue(new HSSFRichTextString(HsDictionary.getInstance().getCaption("业务名称", dealDetailList.getInterfaceProperty(i,"businflag"))));        row.getCell((short)9).setCellValue(new HSSFRichTextString(format.format(Double.valueOf(dealDetailList.getInterfaceProperty(i,"confirmbala")))));        row.getCell((short)10).setCellValue(new HSSFRichTextString(dealDetailList.getInterfaceProperty(i,"status")));          if(i != dealDetailList.getReturnRecords() -1){          s.shiftRows(row.getRowNum()+1, row.getRowNum()+2, 1);          this.copyCellStyleOfRow(s,row, s.getRow(row.getRowNum()+1), 11);          row=s.getRow(row.getRowNum()+1);          }      }        row=s.getRow(row.getRowNum()+1);          row.getCell((short)0).setCellValue(new HSSFRichTextString("共"+dealDetailList.getReturnRecords()+"条记录"));                //-----------生成报表excel文件-------------        ByteArrayOutputStream  fos = new ByteArrayOutputStream();        wb.write(fos);        response.setContentType("application/vnd.ms-excel");        response.setHeader("Content-Disposition", "inline; filename=income_"" +  begDate + "-" + endDate +".xls "");        //确保IE识别本次为下载文件,解决https IE下载无法保存的问题          response.setHeader("Content-Transfer-Encoding","binary");        response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");         response.setHeader("Pragma", "public");        ByteArrayInputStream inputStream = new ByteArrayInputStream(fos.toByteArray());        PrintWriter out = response.getWriter();        int i;        while ( (i = inputStream.read()) != -1) {          out.write(i);        }        out.flush();        inputStream.close();        out.close();        fos.close();      } catch (Exception ex) {        SysLogUtils.error("下载对账数据发生错误:", ex);        throw new BusinessException("ETS-1BT27","下载对账数据发生错误!");       }   return null;   }

热点排行