- 浏览: 7330237 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
POI3.8组件研究(二)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
在解析生成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的转换,必须确定时间的格式,才可以转换。
针对2003和2007的excel中向单元格中写入内容是:
可能有点不同,需要使用CreationHelper生成数据:
Calling the empty HSSFWorkbook remains as the way to create a new, empty Workbook object. To open an existing Worbook, you should now call WorkbookFactory.create(inp).
For all other cases when you would have called a Usermodel constructor, such as 'new HSSFRichTextString()' or 'new HSSFDataFormat', you should instead use a CreationHelper. There's a method on the Workbook to get a CreationHelper, and the CreationHelper will then handle constructing new objects for you.
例如:
Cell cell = row.createCell(index); cell.setCellValue(createHelper.createRichTextString(headerTitle));
发表评论
-
【转】Django resources
2014-01-23 14:35 10802Django resources This page li ... -
使用国内镜像源来加速python pypi包的安装
2014-01-16 11:16 197801pipy国内镜像目前有: http://pypi.d ... -
[转 ]vagrant使用简介
2014-01-10 13:53 257251> 简介: vagrant提供了易于配置,重复性 ... -
[转]在Java中调用Python
2014-01-07 13:08 9210在执行之前都需要把jython对应的包加载进去,这个是必须的 ... -
[转]Jython初探
2014-01-07 11:19 2405转载自: ... -
[转]Eclipse配置PyDev插件
2014-01-02 14:25 2832安装python解释器 安装PyDev: 首 ... -
RestFuse的研究(五) Http请求的封装
2014-06-14 15:50 3622在RestFuse中封装了Http请 ... -
RestFuse的研究(四) Junit的Statement的分析
2013-12-06 11:46 1665在RestFuse提供了多种单 ... -
RestFuse的研究(三) Junit的Rule的使用和分析
2013-12-06 11:01 2233在junit中定义一些可以公用的规则(R ... -
RestFuse的研究(二) Junit的Runner的分类和模式
2013-12-06 10:40 1598在Junit4中的调用JunitCore可以采 ... -
RestFuse的研究(一) HttpJunitRunner的实现
2013-12-06 10:11 1742在RestFuse是一种针对Rest We ... -
[转]An open-source JUnit extension to test HTTP/REST APIs
2013-12-06 09:57 1098http://developer.eclipsesource ... -
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3352TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51573文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14174最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8686TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2709TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2803TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2448TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2778TestNG官方网站: http://testng.or ...
相关推荐
"POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析" 提到了Apache POI库的一个高级话题,主要关注的是如何使用XSSF(XML Spreadsheet Formatting Streams)和SAX(Simple API for XML)的Event API来...
在"poi-3.8-POI-HSSF和POI-XSSF和SXSSF.rar"这个压缩包中,主要涵盖了POI项目对Excel文件处理的三个关键组件:HSSF、XSSF和SXSSF。 1. HSSF (Horrible Spreadsheet Format):这是POI项目早期开发的一个API,用于...
标题中的"poi-src-3.8-beta5-20111217.tar.gz"表明这是一款名为Apache POI的开源项目源代码的压缩包,版本为3.8 Beta5,发布日期为2011年12月17日。Apache POI是一个Java库,主要用于读写Microsoft Office格式的文件...
标题中的"poi-ooxml-schemas-3.8,poi-3.8,poi-ooxml jar包合集"指的是Apache POI项目中用于处理Microsoft Office格式文件的Java库,特别是针对Excel(XLS和XLSX)文档的处理。Apache POI是一个流行的开源库,允许...
内部包括poi-3.8-20120326.jar、poi-ooxml-3.8-20120326.jar、poi-ooxml-schemas-3.8-20120326.jar 测试可用版本,有些下载的不能用
- HSSF API是用于读写老式BIFF格式(Excel 97-2003)的,而XSSF API则处理基于OOXML标准的新式Excel文件。 - 两者都提供了类似的接口,使得在处理不同格式的Excel文件时,代码可以保持相对一致。 3. **解析Excel...
1. **Excel处理**:POI提供了HSSF(Horizontally Stored Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理旧版的.BIFF8格式(.xls)和较新的OOXML格式(.xlsx)。这些API支持创建工作簿、工作表、...
- **poi-3.8-20120326.jar**:核心库,提供了对HSSF(用于旧版Excel .xls)和XSSF(用于新版Excel .xlsx)的支持。 - **poi-ooxml-schemas-3.8-20120326.jar**:包含了Office Open XML的XML模式,用于解析和创建...
标题“读写Excel2007 POI3.8”涉及的是使用Apache POI库的3.8版本处理Microsoft Excel 2007文件的方法。Apache POI是Java的一个开源项目,专门用于读取、创建和修改Microsoft Office格式的文件,特别是Excel文件。在...
总结,Apache POI 3.8-beta4是一个用于处理Microsoft Office文档的Java库,它提供了对Excel、Word和PowerPoint文件的强大支持。通过这个库,开发者可以在Java环境中方便地读取、写入和操作这些文件,广泛应用于数据...
在本文中,我们将深入探讨Apache POI 3.8版本中的Event API,特别是针对HSSF(Horizontally Sparse File Format)的事件解析。Apache POI是一个流行的Java库,它允许开发人员处理Microsoft Office格式的文件,如...
这个版本引入了对Excel 2007的XSSF工作簿的支持,以及对HSSF(Excel 97-2007)和HWPF(Word 97-2007)的改进。此外,它还增强了对PowerPoint (HSLF) 和 OLE2 Compound Document Format 的处理。 - 3.8版中,开发者...
1. **Excel文件处理**:Apache POI 提供了HSSF(Horrible Spreadsheet Format)API来处理旧版的Excel 97-2003格式(.xls),以及XSSF(XML Spreadsheet Format)API来处理Excel 2007及以后版本的.xlsx格式。...
1. **HSSF (Horrible Spreadsheet Format)**:这是用于读写Microsoft Excel 97-2003格式文件(.xls)的API。HSSF提供了低级别数据模型,可以直接操作单元格、公式、样式等,同时还提供了高级用户模型,使得操作Excel...
java中读取word文档需要引用apache的poi开源项目...为方便下载提供6个jar包,其中包含:poi-3.8.jar;poi-ooxml-3.8.jar;poi-ooxml-schemas-3.8.jar;poi-scratchpad-3.8.jar;xmlbeans-2.3.0.jar;dom4j-1.6.1.jar。
Apache POI HSSF和XSSF读写EXCEL总结
在这个 poi-3.8 相关的压缩包中,我们主要关注的是如何使用Apache POI来解析Excel 2003和2007版的文件。 在Excel 2003中,文件格式通常是.XLS,它基于BIFF(Binary Interchange File Format)结构。而Excel 2007及...
poi-3.8-20120326-6个jar包: poi-3.8-20120326.jar poi-examples-3.8-20120326.jar poi-excelant-3.8-20120326.jar poi-ooxml-3.8-20120326.jar poi-ooxml-schemas-3.8-20120326.jar poi-scratchpad-3.8-20120326....
1. **poi-3.8-20120326.jar**:这是Apache POI的主要库,提供了对Excel(HSSF和XSSF)、Word(HWPF和XWPF)和PowerPoint(HSLF和XSLF)的基本支持。 2. **poi-scratchpad-3.8-20120326.jar**:此库包含了POI项目中...
在Java环境中,POI库提供了丰富的API,使得开发者能够方便地读取、写入和操作这些文件。在给定的标题和描述中,提到了几个不同版本的POI,包括3.8、3.9、3.10、3.15和3.17。每个版本都有其特定的更新和改进,下面将...