Excel单元格样式问题
我使用下面的代码从XLSX文件中获取日期值。 对于某些xlsx文件,这是完全正常的。 但它没有给出xlsx文件中的确切日期格式。 此问题适用于某些文件。
例如; 我有这样的日期21/01/2016 (dd/mm/yyyy)
但阅读后,它给出的日期为01/21/16(mm/dd/yy)
有没有其他方法可以获得cellstyle?
是xlsx文件的问题??
String dateFmt = cell.getCellStyle().getDataFormatString(); if (DateUtil.isCellDateFormatted(cell)) { double val = cell.getNumericCellValue(); Date date = DateUtil.getJavaDate(val); String dateFmt = cell.getCellStyle().getDataFormatString(); System.out.println("dateFmt "+dateFmt); value = new CellDateFormatter(dateFmt).format(date); System.out.println("Date "+value); }
如果包含日期的单元格被格式化为默认日期格式( Short Date
),则只有格式id 0xE(14)存储在文件中。 请参阅https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html 。 *.xlsx
文件仅包含
在styles.xml
。 此numFmtId
没有保存特殊的numFmtId
。
因此,如何在Excel
显示它取决于系统的区域设置。
例如,对于我的德语Windows系统, numFmtId="14"
将显示为在Region and Language
设置中设置的TT.MM.JJJJ
:
在英国的英国Windows系统中,默认情况下这将是DD/MM/YYYY
。
但是,如果您在系统设置中更改Short Date
的设置,例如更改为JJJJ-MM-TT
,则此格式也将显示在Excel中,其numFmtId="14"
。
因此,要知道Excel将如何显示numFmtId="14"
的日期,需要知道Region and Language
的确切Windows系统设置。
因此,如果不知道系统的区域设置,apache POI也不知道应该如何显示,因为该文件不包含此信息。 所以它将假设en-us
locale。 这导致日期的m/d/yy
。
您可以检查是否使用了格式ID 14,如果是,则定义您自己的默认日期格式。
if (DateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); System.out.println(date); String dateFmt = ""; if (cell.getCellStyle().getDataFormat() == 14) { //default short date without explicit formatting dateFmt = "dd/mm/yyyy"; //default date format for this } else { //other data formats with explicit formatting dateFmt = cell.getCellStyle().getDataFormatString(); } System.out.println("dateFmt " + dateFmt); String value = new CellDateFormatter(dateFmt).format(date); System.out.println("Date " + value); }
要明确:这一切只有numFmtId="14"
cell.getCellStyle().getDataFormat() == 14
。 所有其他日期格式都将具有显式数据格式字符串cell.getCellStyle().getDataFormatString()
,因此POI可以像在Excel中一样显示它们。
- Apache POI发生了非法reflection访问操作
- 使用Apache POI更新.docx文件的页眉
- 使用java POI插入表时,打开的办公室编写器崩溃了
- java.lang.NoClassDefFoundError:org / openxmlformats / schemas / spreadsheetml / x2006 / main / CTWorkbook $ Factory
- 使用JAVA中的Apache POI和iText从Word(DOC)创建PDF
- 在Apache POI中创建单元格时获取空指针exception
- 如何缓存InputStream以供多种用途
- Apache POI 3.9:找不到WorkbookFactory方法
- Java POI找不到符号WorkbookFactory