Poi 读取 Excel 数据 (版本号: POI3.7)
1 、读取 Excel
รายการส่วนตัว <String []> rosolvefile (inputStream คือ, สตริงคำต่อท้าย, int startrow) พ่น IOException, filenotFoundException {เวิร์กบุ๊ก xssfworkbook = null; if ("XLS" .Equals (คำต่อท้าย)) {XSSFWORKBOOK = HSSFWORKBOOK ใหม่ (IS); } อื่นถ้า ("xlsx" .equals (คำต่อท้าย)) {xssfworkbook = ใหม่ xssfworkbook (IS); } Sheet xssfsheet = xssfworkbook.getSheetat (0); if (xssfsheet == null) {return null; } arrayList <string []> list = new ArrayList <String []> (); int lastrownum = xssfsheet.getLastrownum (); สำหรับ (int rownum = startrow; rownum <= lastrownum; rownum ++) {ถ้า (xssfsheet.getrow (rownum)! = null) {row xssfrow = xssfsheet.getrow (Rownum); short firstCellNum = xssfrow.getFirstCellnum (); สั้น lastCellNum = XSSFROW.GETLASTCELLNUM (); if (firstCellNum! = lastCellNum) {string [] ค่า = สตริงใหม่ [lastCellNum]; สำหรับ (int cellnum = firstcellnum; cellnum <lastcellnum; cellnum ++) {เซลล์ xssfcell = xssfrow.getCell (cellnum); if (xssfcell == null) {ค่า [cellnum] = ""; } else {ค่า [cellnum] = parsexcel (xssfcell); }} list.add (ค่า); }}} รายการส่งคืน; -2、 Excel 数据处理:
Excel 存储日期、时间均以数值类型进行存储, 读取时 poi 先判断是是否是数值类型, 再进行判断转化
1 、数值格式 (cell_type_numeric):
1. 纯数值格式: getNumericCellValue () 直接获取数据
2. 日期格式: 处理 yyyy-mm-dd, d/m/yyyy h: mm, hh: mm 等不含文字的日期格式
1). 判断是否是日期格式: hssfdateutil.iscelldateFormatted (เซลล์)
2). 判断是日期或者时间
cell.getcellstyle (). getDataFormat () == hssfdataformat.getBuiltInformat ("H: mm")
หรือ: 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): 直接获取内容
parseexcel สตริงส่วนตัว (เซลล์เซลล์) {string result = new String (); switch (cell.getCellType ()) {case hssfcell.cell_type_numeric: // 数字类型ถ้า (hssfdateutil.iscelldateFormatted (เซลล์)) {// 处理日期格式、时间格式 simpledateFormat SDF = null; if (cell.getcellstyle (). getDataFormat () == hssfdataformat .getBuiltInformat ("H: mm")) {SDF = new SimpleDateFormat ("HH: MM"); } else {// 日期 sdf = new SimpledateFormat ("yyyy-mm-dd"); } วันที่วันที่ = cell.getDatecellValue (); ผลลัพธ์ = sdf.format (วันที่); } อื่นถ้า (cell.getcellstyle (). getDataFormat () == 58) {// 处理自定义日期格式: M 月 d 日 (通过判断单元格的格式 id 解决, id 58) SimpledateFormat SDF = ใหม่ SimpleDateFormat ("YYYY-MM-DD"); ค่า double = cell.getNumericCellValue (); วันที่ = org.apache.poi.ss.usermodel.dateutil .getJavadate (ค่า); ผลลัพธ์ = sdf.format (วันที่); } else {double value = cell.getNumericCellValue (); CellStyle Style = cell.getCellStyle (); DecimalFormat format = new DecimalFormat (); String temp = style.getDataFormatString (); // 单元格设置成常规ถ้า (temp.equals ("ทั่วไป")) {format.applyPattern ("#"); } result = format.format (ค่า); } หยุดพัก; กรณี hssfcell.cell_type_string: // string 类型 result = cell.getRichStringCellValue (). toString (); หยุดพัก; กรณี hssfcell.cell_type_blank: result = ""; ค่าเริ่มต้น: result = ""; หยุดพัก; } ผลตอบแทนผลลัพธ์; -*万能处理方案:
所有日期格式都可以通过 getDataFormat () 值来判断
yyyy-mm-dd ----- 14
yyyy 年 m 月 d 日 --- 31
yyyy 年 m 月 ------- 57
M 月 D 日 ---------- 58
HH: MM ----------- 20
H 时 mm 分 ------- 32
// 1 、判断是否是数值格式 ถ้า (cell.getCellType () == hssfcell.cell_type_numeric) {รูปแบบสั้น = cell.getCellStyle (). getDataFormat (); SimpledateFormat SDF = NULL; if (รูปแบบ == 14 || รูปแบบ == 31 || รูปแบบ == 57 || รูปแบบ == 58) {// 日期 sdf = ใหม่ simpledateFormat ("yyyy-mm-dd"); } อื่นถ้า (รูปแบบ == 20 || รูปแบบ == 32) {// 时间 sdf = new SimpledateFormat ("HH: MM"); } ค่า double = cell.getNumericCellValue (); วันที่ = org.apache.poi.ss.usermodel.dateutil.getjavadate (ค่า); ผลลัพธ์ = sdf.format (วันที่); -以上这篇 poi 对 excel 自定义日期格式的读取 (实例代码) 就是小编分享给大家的全部内容了, 希望能给大家一个参考,, 也希望大家多多支持武林网。