用POI读取Excel数据:(版本号:POI3.7)
1、读取Excel
- private List<String[]> rosolveFile(InputStream is, String suffix,
- int startRow) throws IOException, FileNotFoundException {
- Workbook xssfWorkbook = null;
- if ("xls".equals(suffix)) {
- xssfWorkbook = new HSSFWorkbook(is);
- } else if ("xlsx".equals(suffix)) {
- xssfWorkbook = new XSSFWorkbook(is);
- }
- Sheet xssfSheet = xssfWorkbook.getSheetAt(0);
- if (xssfSheet == null) {
- return null;
- }
- ArrayList<String[]> list = new ArrayList<String[]>();
- int lastRowNum = xssfSheet.getLastRowNum();
- for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {
- if (xssfSheet.getRow(rowNum) != null) {
- Row xssfRow = xssfSheet.getRow(rowNum);
- short firstCellNum = xssfRow.getFirstCellNum();
- short lastCellNum = xssfRow.getLastCellNum();
- if (firstCellNum != lastCellNum) {
- String[] values = new String[lastCellNum];
- for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {
- Cell xssfCell = xssfRow.getCell(cellNum);
- if (xssfCell == null) {
- values[cellNum] = "";
- } else {
- values[cellNum] = parseExcel(xssfCell);
- }
- }
- list.add(values);
- }
- }
- }
- return list;
- }
2、Excel数据处理:
Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化
1、数值格式(CELL_TYPE_NUMERIC):
1.纯数值格式:getNumericCellValue() 直接获取数据
2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式
1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)
2).判断是日期或者时间
cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")
OR:cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")
3.自定义日期格式:处理yyyy年m月d日,h时mm分,yyyy年m月等含文字的日期格式
判断cell.getCellStyle().getDataFormat()值,解析数值格式
yyyy年m月d日----->31
m月d日---->58
h时mm分--->32
2、字符格式(CELL_TYPE_STRING):直接获取内容
- private String parseExcel(Cell cell) {
- String result = new String();
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
- if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
- SimpleDateFormat sdf = null;
- if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
- .getBuiltinFormat("h:mm")) {
- sdf = new SimpleDateFormat("HH:mm");
- } else {// 日期
- sdf = new SimpleDateFormat("yyyy-MM-dd");
- }
- Date date = cell.getDateCellValue();
- result = sdf.format(date);
- } else if (cell.getCellStyle().getDataFormat() == 58) {
- // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- double value = cell.getNumericCellValue();
- Date date = org.apache.poi.ss.usermodel.DateUtil
- .getJavaDate(value);
- result = sdf.format(date);
- } else {
- double value = cell.getNumericCellValue();
- CellStyle style = cell.getCellStyle();
- DecimalFormat format = new DecimalFormat();
- String temp = style.getDataFormatString();
- // 单元格设置成常规
- if (temp.equals("General")) {
- format.applyPattern("#");
- }
- result = format.format(value);
- }
- break;
- case HSSFCell.CELL_TYPE_STRING:// String类型
- result = cell.getRichStringCellValue().toString();
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- result = "";
- default:
- result = "";
- break;
- }
- return result;
- }
*万能处理方案:
所有日期格式都可以通过getDataFormat()值来判断
yyyy-MM-dd-----14
yyyy年m月d日---31
yyyy年m月-------57
m月d日 ----------58
HH:mm-----------20
h时mm分 -------32
- //1、判断是否是数值格式
- if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
- short format = cell.getCellStyle().getDataFormat();
- SimpleDateFormat sdf = null;
- if(format == 14 || format == 31 || format == 57 || format == 58){
- //日期
- sdf = new SimpleDateFormat("yyyy-MM-dd");
- }else if (format == 20 || format == 32) {
- //时间
- sdf = new SimpleDateFormat("HH:mm");
- }
- double value = cell.getNumericCellValue();
- Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
- result = sdf.format(date);
- }
原文地址:http://yl-fighting.iteye.com/blog/1726285
相关推荐
这篇内容将深入讲解如何使用POI库来读取Excel文件中自定义的日期格式。 首先,我们需要了解Excel中的日期是如何存储的。在Excel中,日期和时间是以数值的形式存储的,每个日期对应一个连续的数字。例如,1900年1月1...
总的来说,Apache POI是一个强大且灵活的库,能够帮助开发者在Java环境下方便地操作Excel文件,无论是简单的数据读取还是复杂的格式处理,都能游刃有余。不过要注意,处理大型Excel文件时,性能可能会成为一个问题,...
总结起来,通过Apache POI库,我们可以方便地使用Java读取Excel文件,处理合并单元格的数据,并将其存储到自定义的实体类中。这为后续的数据分析、业务逻辑处理或数据迁移提供了便利。在实际应用中,还可以根据具体...
在Java编程领域,Apache POI 是一个非常流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS和XLSX)。本教程将深入探讨如何利用Apache POI来在Excel文件中完美地生成水印。水印通常...
在Java开发中,Apache POI库是一个非常实用的工具,用于读取和写入Microsoft Office格式的文件,包括Excel。本篇文章将详细讲解如何利用Apache POI库在Android环境中高效地处理大数据量的Excel文件,无论是2003的....
在实际应用中,你可能还需要处理更复杂的情况,例如日期格式、公式计算、样式和超链接等。Apache POI提供了丰富的API来处理这些特性。例如,可以通过CellStyle获取单元格的样式信息,通过Hyperlink获取超链接内容。 ...
- POI库对文件格式的支持有限,对于较新的Office格式(如.xlsx),需要使用XSSFWorkbook,而对于旧的(如.xls),则使用HSSFWorkbook。 - 处理大型Excel文件时,注意内存管理和流的正确关闭,防止内存溢出和资源...
标题“自定义POI EXCEL模板”涉及到的主要知识点是Apache POI库在Java中的使用,尤其是如何通过这个库来自定义Excel模板。Apache POI是一个开源的Java API,它允许程序员创建、修改和显示Microsoft Office格式的文件...
对于更复杂的场景,例如处理公式、日期、自定义格式等,Apache POI 提供了丰富的 API 来支持。例如,你可以使用 `DataFormatter` 类来格式化数值单元格,或者使用 `CellStyle` 和 `CellType` 来处理特定类型的单元格...
在IT行业中,Apache POI是一个广泛使用的库,它允许开发者在Java环境中创建、修改和读取Microsoft Office格式的文件,尤其是Excel文档。本教程将详细讲解如何利用Apache POI库来实现“使用POI向Excel模板动态添加...
对于日期单元格,POI默认将其视为数字,因此需要转换为日期格式: ```java if (cell.getCellType() == CellType.NUMERIC) { Date date = DateUtil.getJavaDate(cell.getNumericCellValue()); System.out.print...
Apache POI是一个流行的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。在本项目中,我们结合了POI库和XML技术来实现Excel数据的验证与导入数据库。 首先,...
POI库提供了HSSF(用于处理老版本的.XLS格式)和XSSF(用于处理新版本的.XLSX格式)组件,可以进行创建、读取、修改Excel工作簿、工作表、单元格等操作。 在本项目中,Spring Boot结合MyBatis和POI,实现了一个完整...
在Java开发中,Apache POI库是一个非常常用的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel。然而,在处理Excel文件时,有时可能会遇到一些异常情况,比如“LeftoverDataException”。...
在Java开发中,Apache POI库是一个非常实用的工具,它允许程序员创建、修改和读取Microsoft Office格式的文件,包括Excel。本篇文章将详细探讨如何使用POI库来读取Excel文件,以及如何处理合并单元格的问题。 首先...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI库实现Excel的导入和导出功能,这对于处理大量数据和自动化办公...
Apache POI是一个流行的开源Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在Excel处理中,分层通常指的是将数据按特定规则组织成层级结构,如树形结构,以便更有效...
在Java编程环境中,Apache POI库是一个非常实用的工具,它允许我们操作Microsoft Office格式的文件,特别是Excel(.xls和.xlsx)文件。在JMeter测试框架中,我们可以结合使用POI库和BeanShell组件来读取和写入Excel...
在Java开发中,Apache POI库是一个非常重要的工具,它允许程序员读取、写入和修改Microsoft Office格式的文件,包括Excel。"基于POI的Excel多Sheet页导出导入工具类"是一个实用的Java类库,专为处理Excel文件中的多...
- **Apache POI-OOXML-Schemas**: 提供对OOXML标准的直接访问,用于自定义或扩展Excel功能。 总结,Apache POI是Java开发中处理Excel文件的强大工具,涵盖了从基本的读写操作到复杂的格式设置和公式计算。通过熟练...