قراءة قيم التاريخ من خلية اكسل باستخدام POI HSSF API

StackOverflow https://stackoverflow.com/questions/861877

سؤال

وأنا باستخدام 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());
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top