2017-08-15 1 views
0

enter image description hereDateUtil.isCellDateFormatted (Cell Zelle) funktioniert nicht in Java-p o i

Diese meine Eingabe in Zelle A4 gibt es ein Datum. Wie kann ich das in meinem Java-Programm so bekommen wie es ist? Mein DateUtil.isCellDateFormated (Cell) funktioniert nicht. Ich habe DataFormatter verwendet, es gibt mir keine Tage. enter image description here

public String getDataValueAsString(Cell cell){ 
    String value = null; 
    CellType type = cell.getCellTypeEnum(); 
    DataFormatter dataFormat = new DataFormatter(); 
    CreationHelper ch = null; 
    switch(type){ 
     case BLANK: 
      value = ""; 
      break; 
     case BOOLEAN: 
      value = String.valueOf(cell.getBooleanCellValue()); 
      break; 
     case ERROR: 
      value = dataFormat.formatCellValue(cell); 
      break; 
     case FORMULA: 
      FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator(); 
      value = dataFormat.formatCellValue(cell, evaluator); 
      break; 
     case NUMERIC: 
      if(DateUtil.isCellDateFormatted(cell)){ 
       System.out.println("Cell is date formatted : "); 
       ch = cell.getSheet().getWorkbook().getCreationHelper(); 
       short formatIndex = ch.createDataFormat().getFormat(cell.getCellStyle().getDataFormatString()); 
       System.out.println("format index : "+formatIndex); 
       String format = cell.getCellStyle().getDataFormatString(); 
       System.out.println("format : "+format); 
      }else{ 
       //value = String.valueOf(cell.getNumericCellValue()); 
       value = dataFormat.formatCellValue(cell); 
      } 
      break; 
     case STRING: 
      value = cell.getStringCellValue(); 
      break; 
     default: 
      value = dataFormat.formatCellValue(cell); 
    } 
    return value; 
} 
+0

Ich benutze poi 3.17 beta –

+1

Was genau ist die Ausgabe Ihres Codes, wenn die Zelle 'A4' ist? –

+0

Wie lautet der Zellentyp der Zelle "A4" und wie wird die Datenformatzeichenfolge auf die Zelle angewendet? (Holen über den Zellstil) – Gagravarr

Antwort

0

Es scheint, dass Sie Cell.html#getDateCellValue() Methode zu verwenden versuchen.

Einige schnelles Beispiel:

import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.DataFormatter; 
import org.apache.poi.ss.usermodel.Row; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Iterator; 

public class ExternalCaller { 

    public static final String MM_DD_YYYY = "MM/dd/yyyy"; 

    public static void main(String... args) throws IOException { 
     FileInputStream file = new FileInputStream(new File("D:\\test.xls")); 
     HSSFWorkbook workbook = new HSSFWorkbook(file); 
     HSSFSheet sheet = workbook.getSheetAt(0); 
     Iterator<Row> rowIterator = sheet.iterator(); 
     while (rowIterator.hasNext()) { 
      Row row = rowIterator.next(); 
      Iterator<Cell> cellIterator = row.cellIterator(); 
      while (cellIterator.hasNext()) { 
       Cell cell = cellIterator.next(); 
       int cellType = cell.getCellType(); 
       try { 
        determineValue(cellType, cell); 
       } catch (UnsupportedOperationException ex) { 
        System.out.println(ex.getMessage()); 
       } 
      } 
     } 
    } 

    public static void determineValue(int cellType, Cell cell) { 
     switch (cellType) { 
      case Cell.CELL_TYPE_NUMERIC: 
       determineDate(cell); 
       break; 
      case Cell.CELL_TYPE_STRING: 
       System.out.println(cell.getStringCellValue()); 
       break; 
      default: 
       throw new UnsupportedOperationException("This type of cell should be additionally implemented"); 
     } 
    } 

    private static void determineDate(Cell cell) { 
     short dataFormat = cell.getCellStyle().getDataFormat(); 

     if (14 == dataFormat) { 
      Date dateCellValue = cell.getDateCellValue(); 
      System.out.println(new SimpleDateFormat(MM_DD_YYYY).format(dateCellValue)); 
     } else { 
      System.out.println(new DataFormatter().formatCellValue(cell)); 
     } 
    } 
} 

Der Ausgang für die Zelle

enter image description here

wird:

123.0546 
Killme 
78% 
11/22/1995 
This type of cell should be additionally implemented 
1190 

Bitte lassen Sie mich wissen, ob es für Sie arbeitet, sonst Ich werde die Antwort entfernen.

+0

aber hier kennen wir das Format, aber es kann n Anzahl der Formate in einem Excel-Blatt geben, wie man das in Schach hält. Ja, es funktioniert dafür Zelle, aber was, wenn das Format zu "MM-d-YYYY" dann ändert. –

+0

Ihr Code könnte eine Ausnahme auslösen, weil jede Zelle kein Datum hat. –

+0

Also müssen Sie auch Formatierung von der Zelle bekommen und sie für das Datum anwenden, das von Excel empfangen wird? –