at this feel free to add it as a plugin module. We wont be hosting it here however.
</answer>
</faq>
+ <faq>
+ <question>
+ How do you tell if a field contains a date with HSSF?
+ </question>
+ <answer>
+ Excel stores dates as numbers therefore the only way to determine if a cell is
+ actually stored as a date is to look at the formatting. This solution from
+ Jason Hoffman:
+ <p>
+ Okay, here is a little code I used to determine if the cell was a number or
+ date, and then format appropriately. I hope it helps. I keep meaning to
+ submit a patch with the helper method below.... but just haven't had a
+ chance.
+ </p>
+ <source>
+/////// code snippet ////////////
+case HSSFCell.CELL_TYPE_NUMERIC:
+ double d = cell.getNumericCellValue();
+ // test if a date!
+ if (isCellDateFormatted(cell)) {
+ // format in form of M/D/YY
+ cal.setTime(HSSFDateUtil.getJavaDate(d));
+ cellText =
+ (String.valueOf(cal.get(Calendar.YEAR))).substring(2);
+ cellText = cal.get(Calendar.MONTH)+1 + "/" +
+ cal.get(Calendar.DAY_OF_MONTH) + "/" +
+ cellText;
+ }
+/////// end code snippet ////////////
+
+// HELPER METHOD BELOW TO DETERMINE IF DATE
+
+// method to determine if the cell is a date, versus a number...
+public static boolean isCellDateFormatted(HSSFCell cell) {
+ boolean bDate = false;
+
+ double d = cell.getNumericCellValue();
+ if ( HSSFDateUtil.isValidExcelDate(d) ) {
+ HSSFCellStyle style = cell.getCellStyle();
+ int i = style.getDataFormat();
+ switch(i) {
+ // Internal Date Formats as described on page 427 in
+ // Microsoft Excel Dev's Kit...
+ case 0x0e:
+ case 0x0f:
+ case 0x10:
+ case 0x11:
+ case 0x12:
+ case 0x13:
+ case 0x14:
+ case 0x15:
+ case 0x16:
+ case 0x2d:
+ case 0x2e:
+ case 0x2f:
+ bDate = true;
+ break;
+
+ default:
+ bDate = false;
+ break;
+ }
+ }
+ return bDate;
+ }
+ </source>
+ </answer>
+ </faq>
</faqs>