قراءة قيم التاريخ من خلية اكسل باستخدام POI HSSF API
-
21-08-2019 - |
سؤال
وأنا باستخدام POI HSSF API لبلدي التلاعب التفوق في جاوة. لقد قيمة تاريخ "8/1/2009" في واحدة من الخلايا التفوق بلدي وبينما انا احاول ان اقرأ هذه القيمة باستخدام HSSF API، يكشف نوع من الخلايا ك الرقمية وإرجاع قيمة 'ضعف' من تاريخ بلادي. انظر نموذج التعليمات البرمجية أدناه:
cell = row.getCell(); // date in the cell '8/1/2009'
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = new Double(cell.getNumericCellValue()).toString();
break;
default:
}
وCell.getCellType () إرجاع NUMERIC_TYPE وبالتالي هذا الرمز تحويل التاريخ إلى مضاعفة! : (
هل هناك أي طريقة لقراءة التاريخ كما هو الحال في HSSF POI!؟
المحلول
هل يمكن أن نلقي نظرة على:
HSSFDateUtil.isCellDateFormatted()
وانظر POI الرهيبة API تنسيق جدول لمزيد من التفاصيل حول HSSFDateUtil:
http://poi.apache.org/ apidocs / المنظمة / اباتشي / البوي / hssf / usermodel / HSSFDateUtil.html
وهذا يوفر أيضا بعض الأساليب المساعد للعودة getExcelDate()
Excel و جافا يعود getJavaDate()
. عليك أن تكون حذرا بعض الشيء من تنسيقات التاريخ مختلفة على الرغم من ...
نصائح أخرى
إذا كنت تريد الرجوع إلى التاريخ في نفس الشكل في كما في ملف إكسل، يجب عليك استخدام CellDateFormatter. نموذج التعليمات البرمجية:
CellValue cValue = formulaEv.evaluate(cell);
double dv = cValue.getNumberValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = HSSFDateUtil.getJavaDate(dv);
String dateFmt = cell.getCellStyle().getDataFormatString();
/* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as
Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java
will always be 00 for date since "m" is minutes of the hour.*/
strValue = new CellDateFormatter(dateFmt).format(date);
// takes care of idiosyncrasies of Excel
}
وإكسل يعامل التواريخ والأوقات كأرقام ... وقال جون بطريقة أفضل، ولذا فإنني لن صدى له هنا ...
ولكن، نموذج التعليمات البرمجية لما كنت قد وضعت في السؤال هو في HTTP : //poi.apache.org/spreadsheet/quick-guide.html#CellContents
إذا كنت تستخدم POI 3.5 يمكنك استخدام التالية
وcell.getDateCellValue () طريقة. وهذا العمل لبرنامج Excel 2007 أيضا.
ومنذ POI 3.15 beta3 بعض وظائف deprecated
.
يمكنك التحقق من تنسيق البيانات واسترجاعها كما جافا Date
.
SimpleDateFormat format = new SimpleDateFormat("");
String cellValue;
if(cell != null && cell.getCellTypeEnum() != CellType.STRING &&
cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){
cellValue = format.format(cell.getDateCellValue());
}