- 浏览: 851889 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
??????????????? 在解析生成excel2003和2007时候,由于生成的对象不同可能需要创建workbook的不同对象。
判断代码如下:
/** * 创建TableView类型的Excel文件 * @param excelVo excel模型 * @throws IOException */ public InputStream createTableViewerExcelStream(ExcelVO excelVo) throws IOException{ //创建一个EXCEL Workbook wb =null; //支持2007 if("xlsx".equals(excelVo.getPrefix())){ wb=new XSSFWorkbook(); //支持97 ~2003 }else{ wb=new HSSFWorkbook(); } List<SheetVO> sheetList=excelVo.getSheets(); if(CollectionUtils.isNotEmpty(sheetList)){ for (int sheet = 0; sheet < sheetList.size(); sheet++) { createExcelSheet(wb, sheetList, sheet); } } //存储流信息 ByteArrayOutputStream out = new ByteArrayOutputStream(); wb.write(out); //临时存储流信息 ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); out.close(); return in; }
?
?
创建一个sheet的内容如下:
/** * 创建Excel的Sheet * @param wb Excel的对象 * @param sheetList * @param sheetNum */ private void createExcelSheet(Workbook wb, List<SheetVO> sheetList, int sheetNum) { SheetVO sheetVo=sheetList.get(sheetNum); //获取各种样式 //获取数据格式化对象 DataFormat dataformat = wb.createDataFormat(); //获取Sheet的名称 String sheetName=sheetVo.getSheetName(); //创建Sheet Sheet sheet=wb.createSheet(sheetName); // create 2 cell styles CellStyle cs = wb.createCellStyle(); CellStyle cs2 = wb.createCellStyle(); DataFormat df = wb.createDataFormat(); // create 2 fonts objects Font f = wb.createFont(); Font f2 = wb.createFont(); // Set font 1 to 12 point type, blue and bold f.setFontHeightInPoints((short) 12); f.setColor( IndexedColors.RED.getIndex() ); f.setBoldweight(Font.BOLDWEIGHT_BOLD); // Set font 2 to 10 point type, red and bold f2.setFontHeightInPoints((short) 10); f2.setColor( IndexedColors.RED.getIndex() ); f2.setBoldweight(Font.BOLDWEIGHT_BOLD); // Set cell style and formatting cs.setFont(f); cs.setDataFormat(df.getFormat("#,##0.0")); // Set the other cell style and formatting cs2.setBorderBottom(cs2.BORDER_THIN); cs2.setDataFormat(df.getFormat("text")); cs2.setFont(f2); //获取开始写的行号 int rowNum=sheetVo.getRowNum(); //创建标题 Row headerRow = sheet.createRow(0); headerRow.setHeightInPoints(40.0F); Cell titleCell = headerRow.createCell(0); titleCell.setCellValue(sheetVo.getTitle()); sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$T$1")); CreationHelper createHelper = wb.getCreationHelper(); String[] headerTitles=sheetVo.getHeaderTitle(); if(!ArrayUtils.isEmpty(headerTitles)){ //创建表头 Row row = sheet.createRow((short)rowNum); for (int index=0; index < headerTitles.length; index++) { //创建列信息 String headerTitle=headerTitles[index]; Cell cell = row.createCell(index); cell.setCellValue(createHelper.createRichTextString(headerTitle)); //设置列宽,行高 sheet.setColumnWidth((short)index, 5000); } //行记录添加 rowNum++; } //编写shett的内容 List<Map<String,Object>> contentMap=sheetVo.getSheetContentMap(); if(CollectionUtils.isNotEmpty(contentMap)){ for (int index = 0; index < contentMap.size(); index++) { Map<String,Object> rowMap=contentMap.get(index); Row row = sheet.createRow((short)rowNum); createCell(wb, dataformat, rowMap, row,sheetVo); rowNum++; } } } /** * 创建Excel的Cell * @param wb * @param dataformat * @param rowMap * @param row */ private void createCell(Workbook wb, DataFormat dataformat, Map<String, Object> rowMap, Row row,SheetVO sheetVo) { String[] headerTitles=sheetVo.getTitles(); if(MapUtils.isNotEmpty(rowMap)){ CreationHelper createHelper = wb.getCreationHelper(); for (int cellNum=0;cellNum<headerTitles.length;cellNum++) { CellStyle style; //创建列值 Cell cell = row.createCell(cellNum); String key=headerTitles[cellNum]; Object cellValue=rowMap.get(key); if(cellValue instanceof String){ cell.setCellValue(createHelper.createRichTextString((String)cellValue)); }else if((cellValue instanceof Integer)||(cellValue instanceof Long)){ cell.setCellValue(createHelper.createRichTextString(cellValue.toString())); //针对带小数点的数据的处理 }else if((cellValue instanceof Double)||(cellValue instanceof Float)){ cell.setCellValue(Double.valueOf(cellValue.toString())); style = wb.createCellStyle(); style.setDataFormat(dataformat.getFormat("#.##")); //设定样式 cell.setCellStyle(style); //针对Date格式 }else if(cellValue instanceof Date){ /* * 定义显示日期的公共格式 * 如:yyyy-MM-dd hh:mm * */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String newdate = sdf.format(new Date()); // 填充出产日期 cell.setCellValue(createHelper.createRichTextString(newdate)); }else if(cellValue instanceof Boolean){ cell.setCellValue((Boolean)cellValue); } } } }
?
针对excel中的时间格式需要自动转换为数字:
针对POI支持的事件格式如下一种:
org.apache.poi.ss.usermodel.DateUtil:
private static final Pattern date_ptrn1 = Pattern.compile("^\\[\\$\\-.*?\\]"); private static final Pattern date_ptrn2 = Pattern.compile("^\\[[a-zA-Z]+\\]"); private static final Pattern date_ptrn3 = Pattern.compile("^[\\[\\]yYmMdDhHsS\\-/,. :\"\\\\]+0*[ampAMP/]*$"); private static final Pattern date_ptrn4 = Pattern.compile("^\\[([hH]+|[mM]+|[sS]+)\\]");
?
将HH:MM和HH:MM:SS格式的转换数字的源代码如下:
org.apache.poi.ss.usermodel.DateUtil:
public static double convertTime(String timeStr) { try { return convertTimeInternal(timeStr); } catch (FormatException e) { String msg = "Bad time format '" + timeStr + "' expected 'HH:MM' or 'HH:MM:SS' - " + e.getMessage(); throw new IllegalArgumentException(msg); } } private static double convertTimeInternal(String timeStr) throws DateUtil.FormatException { int len = timeStr.length(); if ((len < 4) || (len > 8)) { throw new DateUtil.FormatException("Bad length"); } String[] parts = TIME_SEPARATOR_PATTERN.split(timeStr); String secStr; switch (parts.length) { case 2: secStr = "00"; break; case 3: secStr = parts[2]; break; default: throw new DateUtil.FormatException("Expected 2 or 3 fields but got (" + parts.length + ")"); } String hourStr = parts[0]; String minStr = parts[1]; int hours = parseInt(hourStr, "hour", 24); int minutes = parseInt(minStr, "minute", 60); int seconds = parseInt(secStr, "second", 60); double totalSeconds = seconds + (minutes + hours * 60) * 60; return (totalSeconds / 86400.0D); }
?针对YY-MM-dd时间格式的转换时间格式源代码:
public static Date parseYYYYMMDDDate(String dateStr) { try { return parseYYYYMMDDDateInternal(dateStr); } catch (FormatException e) { String msg = "Bad time format " + dateStr + " expected 'YYYY/MM/DD' - " + e.getMessage(); throw new IllegalArgumentException(msg); } }
?
?
注意:在读取excel时候需要解读HH:MM或者HH:MM:SS或者YYYY/MM/DD的转换,必须确定时间的格式,才可以转换。
?
?
?
?
?
?
发表评论
-
eclispe 实用插件大全
2016-03-31 10:17 834在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的 ... -
单点登录 SSO Session
2016-03-14 16:56 4050单点登录在现在的 ... -
通用权限管理设计 之 数据库结构设计
2016-01-26 13:22 2947通用权限管理设计 之 ... -
分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
2016-01-26 13:22 1490分享一个基于ligerui的系统应用案例ligerRM V2 ... -
通用权限管理设计 之 数据权限
2016-01-26 13:20 738通用权限管理设计 之 数据权限 阅读目录 前 ... -
使用RSA进行信息加密解密的WebService示例
2015-12-28 10:30 871按:以下文字涉及RS ... -
防止网站恶意刷新
2015-10-22 10:55 700import java.io.IOExcept ... -
单点登录
2015-10-19 14:24 760Cas自定义登录页面Ajax实现 博客分类: ... -
session如何在http和https之间同步
2015-09-14 09:25 2253首先说下 http>https>http ... -
基于 Quartz 开发企业级任务调度应用
2015-08-17 11:17 835Quartz 是 OpenSy ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2015-08-17 11:17 874今天来点实际工 ... -
Java加密技术(十)——单向认证
2015-08-13 10:13 677在Java 加密技术(九)中,我们使 ... -
Java加密技术(九)——初探SSL
2015-08-13 10:12 878在Java加密技术(八)中,我们模拟 ... -
Java加密技术(八)——数字证书
2015-08-13 10:12 887本篇的主要内容为Java证书体系的实 ... -
Java加密技术(七)——非对称加密算法最高级ECC
2015-08-13 10:12 971ECC ECC-Elliptic Curv ... -
Java加密技术(六)——数字签名算法DSA
2015-08-13 10:11 1053接下来我们介绍DSA数字签名,非对称 ... -
Java加密技术(五)——非对称加密算法的由来DH
2015-08-12 16:13 865接下来我们 ... -
Java加密技术(四)——非对称加密算法RSA
2015-08-12 16:11 1089接下来我们介绍典型的非对称加密算法—— ... -
Java加密技术(三)——PBE算法
2015-08-12 16:10 952除了DES,我们还知道有DESede( ... -
Java加密技术(二)——对称加密算法DES&AES
2015-08-12 16:09 715接下来我们介绍对称加密算法,最常用的莫 ...
相关推荐
6. **库依赖**:虽然标题中提到了poi3.8,但现代项目可能需要更新版本的Apache POI,因为它包含了更多的功能和错误修复。同时,如果要处理2007及更高版本的文件,还需要引入XSSF和XWPF库。 7. **其他工具和库**:...
这里的"poi-3.8组件"指的是Apache POI项目的3.8版本,这是一个稳定且广泛使用的版本,为开发者提供了在Java环境中读写Microsoft Office文档的能力。 Apache POI的主要知识点包括: 1. **组件结构**:Apache POI...
11. **poi3.8版本.rar**:这可能是整个Apache POI 3.8的源码或附加资源,方便开发者进行深入研究或定制开发。 使用这些库,开发者可以创建Java应用程序来导入和导出Excel文件,例如,创建新的工作簿,添加工作表,...
标题 "POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析" 提到了Apache POI库的一个高级话题,主要关注的是如何使用XSSF(XML Spreadsheet Formatting Streams)和SAX(Simple API for XML)的Event ...
在POI3.8中,最重要的组件包括HSSF(Horrible Spreadsheet Format)和XSSF(Extensible Spreadsheet Format),分别用于处理老版的BIFF8格式(.xls)和新的OOXML格式(.xlsx)。HSSF提供了对Excel 97-2003工作簿的...
这个压缩包包含的6个jar文件是POI 3.8版的核心组件,每个都有特定的功能: 1. **poi-3.8-20120326.jar**:这是Apache POI的主要库,包含了处理二进制Excel文件(.xls)的基本功能。你可以通过这个库创建、读取和...
标题中的"poi3.8jar包"指的是Apache POI项目的3.8版本的Java库,这个库以JAR(Java Archive)文件的形式提供,便于Java开发者在他们的应用中集成对Office文档的支持。 Apache POI的主要功能: 1. **Excel处理**: ...
1. **HSSF和XSSF**:这是POI用来处理Excel文件的两个主要组件。HSSF是处理旧版BIFF格式(.xls)的API,而XSSF则是用于处理OOXML格式(.xlsx)的API。两者都提供了创建工作簿、工作表、单元格、样式等功能。 2. **...
Apache POI库提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个主要组件,分别用于处理老版本的BIFF格式(.xls)和新版本的OOXML格式(.xlsx)。对于大数据量的Excel文件,XSSF通常更...
标题中的"POI3.8以及3.9的API"指的是这两个版本的API接口文档,是开发者理解和使用POI库的关键资源。API文档详尽地列出了各种类、方法和接口,使得开发者能够有效地利用POI进行文件操作。 在POI 3.8和3.9中,主要...
在本文中,我们将深入探讨Apache POI 3.8版本中的Event API,特别是针对HSSF(Horizontally Sparse File Format)的事件解析。Apache POI是一个流行的Java库,它允许开发人员处理Microsoft Office格式的文件,如...
标题“读写Excel2007 POI3.8”涉及的是使用Apache POI库的3.8版本处理Microsoft Excel 2007文件的方法。Apache POI是Java的一个开源项目,专门用于读取、创建和修改Microsoft Office格式的文件,特别是Excel文件。在...
Apache POI是一个强大的Java库,专门用于处理微软的OLE2组件文档格式,如Microsoft Excel、Word、PowerPoint等。这个库使得在Java环境中创建、读取和修改这些文件变得非常容易,无需依赖于微软的Office套件。"POI ...
Apache POI的API设计直观且易于理解,其核心组件包括: 1. HSSF(Horrible Spreadsheet Format):用于处理老版的Excel 97-2003文件格式(.xls)。 2. XSSF(XML Spreadsheet Format):用于处理Excel 2007及以后...
这个压缩包提供了POI项目3.8版本的所有核心组件以及相关的XML schema定义,使得Java开发者能够方便地在应用程序中读取、写入和操作这些Office文档。 POI是Apache软件基金会的一个开源项目,它的全称是"Poor ...
这个压缩包中包含的文件是Apache POI 3.8版本的组件,允许开发者在Java环境中读取、写入和修改这些Office文档。 1. **POI-3.8.jar**:这是主POI库的核心JAR文件,包含了处理Excel(HSSF和XSSF)、Word(HWPF和XWPF...
这个资源包含了Apache POI 3.8 - beta4版本的所有开发所需的JAR包,使得Java开发者能够轻松地在他们的应用中实现读取、写入以及修改Office文档的功能。 1. **Apache POI 概述** Apache POI 是Apache软件基金会的一...
这个“poi-src-3.8”源码库是Apache POI 3.8版本的源代码,它包含了构建和理解这些文件格式所需的全部Java类和方法。 在3.8版本中,Apache POI提供以下关键功能: 1. **Excel处理**:POI-HSSF(Horrible ...
在这个压缩包中,你将会找到六个名为"poi-3.8-20120326"的JAR文件,这很可能是Apache POI库的不同组件或模块。JAR(Java Archive)是Java平台的标准打包格式,用于收集多个类文件和其他资源文件,便于部署和分发。这...