public List<Map> readExcel (InputStream inputStream) { Workbook workbook = null ; // 工作簿对象 Cell cell = null ; // 单元格对象 try { // 获取Excel文件对象 workbook = Workbook.getWorkbook(inputStream); // 获取文件的指定工作表,默认的第一个 Sheet sheet = workbook.getSheet( 0 ); log.debug( "导入文件的总行数---" + sheet.getRows()); if (sheet == null || sheet.getRows() < 1 ) { return new ArrayList<Map>(); Map headMap = new HashMap(); // 从第一行开始读取,获取表头文字 for ( int i = 0 ; i < 1 ; i++) { // 创建一个数组 , 用来存储每一列的值 String[] strArray = new String[sheet.getColumns()]; // 从第一列开始读取,获取表头的文字 for ( int j = 1 ; j < strArray.length; j++) { // 获取第i行,第j列的值 cell = sheet.getCell(j, i); strArray[j] = cell.getContents(); Pattern p = Pattern.compile( "\\s*|\t|\r|\n" ); Matcher m = p.matcher(strArray[j]); strArray[j] = m.replaceAll( "" ); headMap.put(j, strArray[j]); // 创建一个list 用来存储读取的内容 List<Map> list = new ArrayList<Map>(); // 行数(表头的目录不需要,从1开始) for ( int i = 1 ; i < sheet.getRows(); i++) { Map map = new HashMap(); // 创建一个数组 , 用来存储每一列的值 String[] strArray = new String[sheet.getColumns()]; if (sheet.getColumns() < 1 ) { return new ArrayList<Map>(); for ( int j = 1 ; j < strArray.length; j++) { // 获取第i行,第j列的值 cell = sheet.getCell(j, i); // 判断是否是时间格式 if (cell.getType() == CellType.DATE) { DateCell dc = (DateCell) cell; Date date = dc.getDate(); TimeZone zone = TimeZone.getTimeZone( "GMT" ); SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); sdf.setTimeZone(zone); String sDate = sdf.format(date); strArray[j] = sDate; } else { strArray[j] = cell.getContents(); String headItem = String.valueOf(headMap.get(j)); map.put(TpcEnum.getHeadName(headItem), strArray[j]); // 把刚获取的列存入list list.add(map); return list; } catch (FileNotFoundException e) { e.printStackTrace(); return new ArrayList<Map>(); } catch (BiffException e) { e.printStackTrace(); return new ArrayList<Map>(); } catch (IOException e) { e.printStackTrace(); return new ArrayList<Map>(); public static String dayToDate(int day){ Calendar calendar = new GregorianCalendar(1900,0,-1); Date d = calendar.getTime(); Date date 问题 背景: java 中使用poi进行 excel 导入数据时,日期格式在数据库中存放为varchar2类型。 问题 :存放数据日期 读取 数据为“44439”的数字,因判断格式类型为yyyy-mm-dd无法存放并提醒 解决办法:日期为“44439”的数字,无法使用SimpleDateFormat的parse方法进行转换。 需要引入import org.apache.poi.hssf.usermodel.HSSFDateUtil;HSSFDateUtil工具类处理 时间 Date setupTime = HSSFDa 在做导入功能时发现 excel 表格中的 时间 日期的格式默认是Y/m/d,在后台检索 excel 文件时获取到的 时间 日期的值与在表中插入的数据不符合,可能是一个五位整数,这个时候需要我们使用三元表达式。如果获取到的值与表中实际字段数据类型不符合,可以进行一下运算:(获取到的值 - 25569)*24*60*60可以获取到对应这个 时间 时间 戳,然后根据 时间 戳进行转换就可以解决了。环境:fastadmin框架,PHP7.4.3,PHP Excel -1.8。 java 导入 excel 文档 日期 时间 格式出错 java .text.ParseException: Unparseable date: "44480.6633101852 ,完美解决 问题 描述:解决方法: 问题 描述: 项目中有个需求是导入 excel 文档,文档中有个日期 时间 ,开始导入时总是报错,如下图所示的错误: 解决方法: 在导入文件时,遍历每一行时加入如下方法: public List<Map<String,String>> uploadFileParse(Sheet sheet, 在 Java 中解析 Excel 是很多管理类系统的重要功能, 目前主要有阿里的easy Excel 和HSSF两种开源工具,如何使用网上有大量的例子,不再赘述,我们这里看三个我亲身经历的 问题 :自动跳过空字段中文内容自动给加了拼音 时间 处理错误。本文首先分析故障现象或者原因,之后给出解决方案。 最近做 excel 导入时碰到一个 时间 时制的 问题 excel 文档里是24时制的,结果导入到数据库发现是12时制的,最后在360doc上找到了解决 问题 ,这里是记录下自己的理解和处理方法。 首先:文档里的 时间 格式 导入到数据库的格式 Java 代码实现之前请确保导入了jxl.jar包及数据库连接包 jxl.Workbook rwb=null; InputStream is Excel 里的 时间 常见的写法有三种,一种时2021/5/12,一种时2021-05-12,一种是20210512,第一种和第三种在 Excel 里是 时间 格式,第二种是常规格式,也就是字符串。 当我们使用 java 读取 Excel 时,读单元格数据时规定了一种类型一种方法,不同类型的数据用一种方法就会报错,可以先将单元格的数据统一转为字符串 row.getCell(rowNum).setCellType(XSSFCell.CELL_TYPE_STRING); 但是当日期为2021/5/12这种格式时,转换就出了 问题 java 读取 excel 里面的日期会出现相差8小时的 问题 。 比如 excel 里面有一个日期是:2012-7-2 17:14:03秒,用Cell cell=readSheet.getCell(colNo, rowNo);调试该cell,发现里面的值竟然是2012-7-3 1:14:13,相差了8小时。 更奇怪的是,用String date=cell.getContents()后,得到的值... Excel 上传导入, Excel 里面单元格是日期的会解析出来数字,比如2020-07-11会解析为44023。使用代码处理,把解析出来的44023转换为2020-07-11。 Excel 单元格格式设置为文本格式。