- 浏览: 585390 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lihaiming:
受用了,已把定义的版本改为跟本地的一致,不用担心找不到了,现应 ...
Cannot find the declaration of element 'beans' -
Albert_Hawking:
看到这个帖子,解决了我的问题。 我的总结是这样的:由于mave ...
Cannot find the declaration of element 'beans' -
di1984HIT:
学习了啊,哈哈哈~~
win7下安装的sqlserver ,1433端口不通 -
蛋呢823:
我也碰到这个问题,尝试了你这个方法也不行,自己摸索了一天,终于 ...
was缓存导致web.xml更改无效 -
liuxiyangyang:
文章帮了我大忙了,谢谢
Cannot find the declaration of element 'beans'
最近工作需求使用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; }
发表评论
-
使用json-lib进行Java和JSON之间的转换
2013-05-09 09:30 1129http://www.cnblogs.com/mailing ... -
java验证身份证号码及编码规则和提取相应信息
2012-09-21 16:39 1817转自:http://www.cnblogs.com ... -
判断二个RGB颜色相近
2012-08-27 12:04 8982转自:http://blog.sina.com.cn/s ... -
Java中颜色的String和Color对象之间的互相转换
2012-06-27 09:10 2588转自http://blog.csdn.net/signs ... -
字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
2012-06-04 16:07 1441摘自 <http://polaris1119.iteye ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-04-26 15:28 799http://www.iteye.com/magazines/ ... -
POI实现插入行
2012-01-17 17:13 15277http://hi.baidu.com/xiangliling ... -
POI操作Excel文档-中级篇
2012-01-17 17:12 1293转自 http://ltc603.iteye.com/blo ... -
POI操作Excel文档-基础篇
2012-01-17 17:09 1100转自:http://ltc603.iteye.com/blog ... -
制作完整的java可执行文件
2012-01-09 10:56 1013转自:http://www.cnblogs.com/Seiya ... -
Step By Step(Java 系列的目录)
2012-01-09 10:10 783转自:http://www.cnblogs.com/steph ... -
引用weblogic10的weblogic.jar
2011-12-27 11:35 2889weblogic10及以后的版本,不能直接使用server/l ... -
SWING 那几刀
2011-12-25 01:29 1971最近想做一些桌面程序,所以把前段时间ITEYE上很多的Swin ... -
遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法
2011-12-22 15:46 3032转自http://hi.baidu.com/notyetfis ... -
Crack JRebel 4.0,无需重启JVM,热部署解决方案
2011-12-02 15:44 1456http://dl.dropbox.com/u/2295134 ... -
log4j详解与实战
2011-11-01 15:45 1178转自:http://www.iteye.com/t ... -
【解惑】深入jar包:从jar包中读取资源文件
2011-07-17 12:36 1174我们常常在代码中读取一些资源文件(比如图片,音乐,文 ... -
sun.misc.BASE64Encoder与sun.misc.BASE64Decoder导入错误
2011-07-14 21:24 12220项目中引用import sun.misc.BASE64Deco ... -
分享高效java开发者必备的资源列表
2011-07-14 09:11 1251分享高效java开发者必备 ... -
dom4j通过xpath查询xml
2011-06-30 12:12 1028转自http://www.cnblogs.com/roo ...
相关推荐
在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了HSSF(Horrible Spreadsheet Format)用于读写旧版的.xls格式的Excel文件,而XSSF则用于处理.xlsx格式的...
POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...
标题中的"poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad"提及的是Apache POI项目中的多个关键组件和目录结构。Apache POI是一个开源的Java库,专门用于读写Microsoft Office...
### Apache POI 3.8 架构与应用详解 #### 一、Apache POI 概述 Apache POI 是一个由 Apache 软件基金会维护的开源项目,旨在为 Java 开发者提供一系列 API 以支持 Microsoft Office 文件格式的读写功能。POI 提供...
个人整理的POI解析EXCEL常用API详解 里面包括我在使用过程中的一些心得
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel(.xlsx、.xls)、Word(.doc、.docx)和PowerPoint(.ppt、.pptx)。这个压缩包包含了POI项目中所有必要的jar包,总计十二个,确保了...
标题提到的"poi4.1.1所有相关jar包汇总"意味着这是一个包含Apache POI 4.1.1版本所有必需的库文件的集合,用于在Java项目中处理Excel文件。 Apache POI 4.1.1版的主要亮点包括: 1. **增强的性能**:新版本通常会...
这篇博客文章“POI操作Excel常用方法总结”可能详细介绍了如何利用Apache POI库在Java环境中读写Excel文件。以下是对该主题的一些关键知识点的详细说明: 1. **Apache POI介绍**: Apache POI是开源项目,提供了...
### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来处理 Microsoft Office 文件格式,特别是针对 Excel(`.xls` 和 `.xlsx`)...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。POI 提供了一套 Java API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件。标题中的"poi-3.17 poi-...
这个压缩包包含了POI项目的几个核心组件的jar文件,包括基础的`poi`库,以及支持Open XML格式(OOXML)的`poi-ooxml`和`poi-ooxml-schemas`。这些jar包在Java开发中非常有用,尤其是当你需要在应用程序中读取、写入...
Apache POI是一个开源项目,主要用于读取和写入Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。这个“POI中文帮助文档”提供了全面的指南,帮助开发者理解和...
总结来说,Apache POI 3.10.1版本的上传组件为Java开发者提供了一套强大的工具,用于处理和操作Microsoft Office的文件格式,涵盖了Excel、Word和PowerPoint的多种功能,大大提升了开发效率并扩展了应用的可能性。
总结来说,Apache POI 是Java开发中处理Excel文件的强大工具,它提供了全面的API来操作Excel的各种特性。结合 poi-3.9.jar、poi-ooxml-3.9.jar 和 poi-ooxml-schemas-3.9.jar 这三个库,开发者可以构建出功能丰富的...
关于poi ,Apache在今年,也就是在2017年9月15日 正式发布了POI 3.17版本, Apache POI团队对于3.17版本进行了一些功能的修复。主要是几个新的功能区域和许多错误修复。 POI 3.17是支持Java 6的最后一个版本。下一个...
poi|信息点|高德poiPOI是“Point of Interest”的缩写,中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、 一个商铺、一个邮筒、一个公交站等。 高德POI又名高德兴趣点,来源于高德地图,...
在IT行业中,POI(Point of Interest)是一个重要的概念,主要指地图上的兴趣点,例如商业场所、公共服务设施、交通站点等。百度POI和高德POI是两大知名的中国地图服务提供商,它们提供了丰富的地理信息数据,为...
本文主要总结了使用POI操作Excel的一些核心概念和常见方法。 首先,了解POI的基本概念: 1. **POI简介**:Apache POI是一个开源项目,其提供的API使得Java程序能够处理MS Office格式的文档,包括Excel(XLS和XLSX...
标题中的“2019版本poi 2019高德poi 2019百度poi”提及的是关于2019年不同来源的POI(Point of Interest)数据,这些数据可能包括了高德地图和百度地图提供的兴趣点信息。POI数据是地理位置信息系统(GIS)中的一个...