`
weihong01267
  • 浏览: 52027 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

poi excel dataformat

    博客分类:
  • poi
 
阅读更多

用POI读取Excel数据:(版本号:POI3.7)

1、读取Excel

Java代码  收藏代码
  1. private List<String[]> rosolveFile(InputStream is, String suffix,  
  2.             int startRow) throws IOException, FileNotFoundException {  
  3.         Workbook xssfWorkbook = null;  
  4.         if ("xls".equals(suffix)) {  
  5.             xssfWorkbook = new HSSFWorkbook(is);  
  6.         } else if ("xlsx".equals(suffix)) {  
  7.             xssfWorkbook = new XSSFWorkbook(is);  
  8.         }  
  9.         Sheet xssfSheet = xssfWorkbook.getSheetAt(0);  
  10.         if (xssfSheet == null) {  
  11.             return null;  
  12.         }  
  13.         ArrayList<String[]> list = new ArrayList<String[]>();  
  14.         int lastRowNum = xssfSheet.getLastRowNum();  
  15.         for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {  
  16.             if (xssfSheet.getRow(rowNum) != null) {  
  17.                 Row xssfRow = xssfSheet.getRow(rowNum);  
  18.                 short firstCellNum = xssfRow.getFirstCellNum();  
  19.                 short lastCellNum = xssfRow.getLastCellNum();  
  20.                 if (firstCellNum != lastCellNum) {  
  21.                     String[] values = new String[lastCellNum];  
  22.                     for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {  
  23.                         Cell xssfCell = xssfRow.getCell(cellNum);  
  24.                         if (xssfCell == null) {  
  25.                             values[cellNum] = "";  
  26.                         } else {  
  27.                             values[cellNum] = parseExcel(xssfCell);  
  28.                         }  
  29.                     }  
  30.                     list.add(values);  
  31.                 }  
  32.             }  
  33.         }  
  34.         return list;  
  35.     }  

 

 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):直接获取内容

 

Java代码  收藏代码
  1. private String parseExcel(Cell cell) {  
  2.         String result = new String();  
  3.         switch (cell.getCellType()) {  
  4.         case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型  
  5.             if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式  
  6.                 SimpleDateFormat sdf = null;  
  7.                 if (cell.getCellStyle().getDataFormat() == HSSFDataFormat  
  8.                         .getBuiltinFormat("h:mm")) {  
  9.                     sdf = new SimpleDateFormat("HH:mm");  
  10.                 } else {// 日期  
  11.                     sdf = new SimpleDateFormat("yyyy-MM-dd");  
  12.                 }  
  13.                 Date date = cell.getDateCellValue();  
  14.                 result = sdf.format(date);  
  15.             } else if (cell.getCellStyle().getDataFormat() == 58) {  
  16.                 // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  
  17.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  18.                 double value = cell.getNumericCellValue();  
  19.                 Date date = org.apache.poi.ss.usermodel.DateUtil  
  20.                         .getJavaDate(value);  
  21.                 result = sdf.format(date);  
  22.             } else {  
  23.                 double value = cell.getNumericCellValue();  
  24.                 CellStyle style = cell.getCellStyle();  
  25.                 DecimalFormat format = new DecimalFormat();  
  26.                 String temp = style.getDataFormatString();  
  27.                 // 单元格设置成常规  
  28.                 if (temp.equals("General")) {  
  29.                     format.applyPattern("#");  
  30.                 }  
  31.                 result = format.format(value);  
  32.             }  
  33.             break;  
  34.         case HSSFCell.CELL_TYPE_STRING:// String类型  
  35.             result = cell.getRichStringCellValue().toString();  
  36.             break;  
  37.         case HSSFCell.CELL_TYPE_BLANK:  
  38.             result = "";  
  39.         default:  
  40.             result = "";  
  41.             break;  
  42.         }  
  43.         return result;  
  44.     }  

 

 *万能处理方案

所有日期格式都可以通过getDataFormat()值来判断

yyyy-MM-dd-----14

yyyy年m月d日---31

yyyy年m月-------57

m月d日  ----------58

HH:mm-----------20

h时mm分  -------32

 

Java代码  收藏代码
  1. //1、判断是否是数值格式  
  2. if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){  
  3.     short format = cell.getCellStyle().getDataFormat();  
  4.     SimpleDateFormat sdf = null;  
  5.     if(format == 14 || format == 31 || format == 57 || format == 58){  
  6.         //日期  
  7.         sdf = new SimpleDateFormat("yyyy-MM-dd");  
  8.     }else if (format == 20 || format == 32) {  
  9.         //时间  
  10.         sdf = new SimpleDateFormat("HH:mm");  
  11.     }  
  12.     double value = cell.getNumericCellValue();  
  13.     Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);  
  14.     result = sdf.format(date);  
  15. }  
 

 189 yyyy-mm-dd hh:mm:ss

分享到:
评论

相关推荐

    POI操作Excel完美生成水印

    POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理旧版的.BIFF8格式(XLS)和基于XML的新版格式(XLSX)。生成水印的过程涉及以下几个关键步骤: 1. **创建文字...

    POI使用Excel模板文件循环输出行并导出Excel

    POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理老版本的.xls文件和新版本的.xlsx文件。在我们的场景中,如果模板是.xlsx格式,我们将使用XSSFWorkbook,...

    poi excel导入导出

    对于Excel,POI支持老版本的HSSF(Horrible Spreadsheet Format)和新版本的XSSF(XML Spreadsheet Format)。 二、Excel导入 1. 创建Workbook对象:首先,我们需要创建一个Workbook对象来表示Excel文件。对于.xls...

    poi3.9读写excel兼容03和07版本

    "poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...

    java POI Excel操作

    DataFormat dataFormat = workbook.createDataFormat(); dateCellStyle.setDataFormat(dataFormat.getFormat("mm/dd/yyyy")); cell.setCellStyle(dateCellStyle); cell.setCellValue(new Date()); ``` **3. 样式与...

    Java POI 生成Excel时显示货币格式

    这可以通过创建`DataFormat`对象并调用`format(int formatIndex)`或`format(String formatString)`方法实现,其中`formatString`参数允许输入自定义的格式字符串,如“¥#,##0.00;[Red]¥(#,##0.00)”等。 通过掌握...

    poi excel 3.2 jar包 与API

    - **DataFormat**: 用于设置单元格的格式,如日期、货币、百分比等。 - **Hyperlink**: 支持在工作簿中创建超链接。 使用POI时,首先需要添加对应的jar包到项目类路径中。例如,对于 poi-bin-3.2-FINAL-20081019....

    poi导出excel通用类

    6. **DataFormat**:用于定义单元格数据的格式,如数值、日期、百分比等。 一个简单的“poi导出excel通用类”可能包含以下功能: 1. **初始化工作簿**:创建HSSFWorkbook对象,并根据需要创建多个Sheet。 2. **...

    poi excel read write

    在Excel处理方面,它提供了HSSF(Horrible Spreadsheet Format)用于处理97-2003版本的.xls文件,而XSSF(XML Spreadsheet Format)则用于处理2007及以上版本的.xlsx文件。 对于`poireadwriteexcel`这个文件,可能...

    JAVA POI导出EXCEL代码

    import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.IndexedColors; Font font = workbook.createFont(); font.setFontHeightInPoints((short) 12); font.setColor(IndexedColors...

    POI实现Excel导出功能

    try (OutputStream outputStream = new FileOutputStream("PoiExcel.xlsx")) { workbook.write(outputStream); // 将工作簿写入文件 } workbook.close(); } } ``` 上述代码创建了一个名为"Sheet1"的工作表,...

    poi生成Excel及合并单元格示例

    Apache POI 提供了多种单元格类型,如 `DataFormat`、`FormulaEvaluator` 等,可以根据需求创建不同的单元格: ```java Row row = sheet.createRow(0); // 创建第一行 Cell cell = row.createCell(0); // 在第一行...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    POI提供了HSSF(Horrible Spreadsheet Format)用于处理.xls文件,而XSSF用于处理.xlsx文件。这两个接口分别提供了对低级和高级模型的访问,使得我们可以创建、读取和修改Excel工作簿、工作表、单元格等元素。 1. *...

    SpringBoot整合poi实现Excel文件的导入和导出.pdf

    Apache POI 是一个流行的Java库,它允许开发者读写Microsoft Office格式的文件,包括Excel。下面我们将详细介绍如何在SpringBoot中整合POI来实现Excel的导入和导出,以及如何利用ExcelFormatUtil工具类进行单元格...

    POI操作excel

    这里,我们创建了一个新的样式`cellStyle`,并设置了数据格式`DataFormat`,然后将其应用到单元格上。 2. **保留两位小数** 如果要将1.2显示为1.20,可以使用内置的Excel格式"0.00": ```java HSSFCell cell = ...

    POI 专用于EXcel的三个jar包和文档

    - DataFormat:用于创建和应用格式到单元格上,比如百分比、货币、日期格式等。 - HSSF 和 XSSF:HSSF是处理.xls文件的,XSSF处理.xlsx文件。两者API相似,但XSSF能处理更多特性和更大的文件。 在实际开发中,你...

    java利用poi生成excel报表、处理word文档

    5. 数据格式化:对于数字、日期等,我们可以使用`DataFormat`对象定义单元格的显示格式。 6. 写入文件:最后,我们需要将整个工作簿写入到磁盘上的文件,使用`write()`方法完成这一操作,然后关闭流以确保数据完整...

    poi操作excel导入导出,实际项目中应用并且优化

    日期需要特别处理,通过`CellStyle`中的`DataFormat`设置。 6. **样式与格式** `CellStyle`类提供了许多属性,如字体、填充、边框、对齐方式等,可以定制单元格的外观。 7. **读取Excel数据** 通过`getSheetAt()...

    POI 导入导出Excel表

    3. 对于日期单元格,使用`DataFormat`和`cell.getDateCellValue()`来正确读取和格式化日期。 4. 当读取单元格时,如果单元格类型不确定,可以使用`cell.getCellType()`判断后再读取,避免异常。 总结,Apache POI ...

    POI 导出Excel源码工具类(包含jar包)

    - 可以使用 `DataFormat` 类创建自定义格式或引用预定义的格式。 6. **公式和图表** - POI 支持在单元格中插入和处理 Excel 公式,使用 `FormulaEvaluator` 类进行计算。 - 对于图表,POI 提供了相应的 API 创建...

Global site tag (gtag.js) - Google Analytics