2017-08-15 10 views
0

enter image description hereDateUtil.isCellDateFormatted(電池セル)は、セルA4で、私は

この私の入力日付があるJavaのP 0で動作していません。それは私のJavaプログラムでこれをどうやって得ることができますか?私のDateUtil.isCellDateFormated(Cell)は機能しません。 私はDataFormatterを使用しています。 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

poiを使用しています。3.17 beta –

+1

'cell'が' A4'のときのコードの出力は正確に何ですか? –

+0

セル「A4」のセルタイプとは何ですか?セルに適用されるデータフォーマット文字列は何ですか? (セルスタイルでフェッチする) – Gagravarr

答えて

0

あなたがCell.html#getDateCellValue()メソッドを使用しようとすることができているようです。

いくつかの簡単な例:

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)); 
     } 
    } 
} 

セルの出力

enter image description here

は次のようになります。

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

が、それはあなたのために働く場合は私に知らせてください、そうでない場合私は答えを取り除きます。

+0

しかし、ここで私たちはフォーマットを知っていますが、n個のフォーマットがExcelシートにあります。どのようにチェックしてください。フォーマットが「MM-d-YYYY」に変わるとどうなりますか? –

+0

すべてのセルに日付がないため、コードが例外をスローする可能性があります。 –

+0

セルからもフォーマットを取得し、それをExcelから受け取る日付に適用する必要がありますか? –