2016-07-21 18 views
1

Ich versuche Apache Java POI zu verwenden, um Daten zu einer Tabelle hinzuzufügen. Ich werde jedoch mit den Datumsangaben in den Datumsformatierten Zellen enden, die von der Zelle nicht als Daten erkannt werden, sondern als Strings. Wenn ich die Tabelle jedoch später öffne, ist nichts weiter als ein Klick in die Zelle - d. H. Bearbeitung, ohne dass eine effektive Änderung vorgenommen wird - und das Datumsformat wird automatisch erkannt. Wie kann ich mit meinem Programm diesen letzten Schritt durchführen, ohne dass ich mich einmischen muss? Vielen Dank im Voraus!Datum in Zelle formatiert als Datum nicht als Datum erkannt

CreationHelper creationHelper = wb.getCreationHelper(); 
    XSSFCellStyle cellStyleDate = wb.createCellStyle(); 

    LocalDate start = LocalDate.of(2000, 1, 1); 
    LocalDate end = LocalDate.of(2000, 12, 31); 

    cellStyleDate.setDataFormat(creationHelper.createDataFormat().getFormat("dd.mm.yyyy")); 
    int i = 1; 
    for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) { 

     // wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date); 
     wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date.toString()); 
     // wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date.getDayOfMonth() + "." + date.getMonthValue() + "." + date.getYear()); 

     wb.getSheetAt(0).getRow(i).getCell(0).setCellStyle(cellStyleDate); 
     i++; 
    } 

Antwort

2

Ab ist documented gibt es zwei mögliche Methoden für ein Datum Wert. setCellValue(java.util.Calendar value) und setCellValue(java.util.Date value). Die Verwendung von java.time.LocalDate wird bis jetzt nicht unterstützt.

Sie müssen daher die LocalDate in java.util.Date konvertieren, bevor Sie als Zellenwert festlegen.

Beispiel:

import java.io.*; 

import org.apache.poi.ss.usermodel.*; 

import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import java.util.Date; 
import java.time.LocalDate; 
import java.time.ZoneId; 

import java.awt.Desktop; 

class LocalDateTest { 

public static void main(String[] args) { 
    try { 

    Workbook wb = new XSSFWorkbook(); 
    Sheet sheet = wb.createSheet("Sheet1"); 

    CreationHelper creationHelper = wb.getCreationHelper(); 
    CellStyle cellStyleDate = wb.createCellStyle(); 

    LocalDate start = LocalDate.of(2000, 1, 1); 
    LocalDate end = LocalDate.of(2000, 12, 31); 

    cellStyleDate.setDataFormat(creationHelper.createDataFormat().getFormat("dd.mm.yyyy")); 
    int i = 1; 
    for (LocalDate localdate = start; localdate.isBefore(end.plusDays(1)); localdate = localdate.plusDays(1)) { 
    Date date = Date.from(localdate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 
    wb.getSheetAt(0).createRow(i).createCell(0).setCellValue(date); 
    wb.getSheetAt(0).getRow(i).getCell(0).setCellStyle(cellStyleDate); 
    i++; 
    } 

    OutputStream out = new FileOutputStream("LocalDateTest.xlsx"); 
    wb.write(out); 
    wb.close(); 

    System.out.println("Done"); 
    File outputfile = new File("LocalDateTest.xlsx"); 
    Desktop.getDesktop().open(outputfile); 


    } catch (FileNotFoundException fnfex) { 
    } catch (IOException ioex) { 
    } 
} 
} 
+0

perfekt funktioniert jetzt! In Bezug auf die Einschränkungen der aktuellen Dokumentation haben Sie ein hundertprozentiges Recht. Vielen Dank! Ich denke, meine Lektion für heute ist, dass immer das Neueste nicht unbedingt besser ist, besonders wenn diese Dinge (noch) nicht unterstützt werden. Außerdem, vielen Dank für das ausgearbeitete Beispiel. Ich wünsche dir einen schönen Tag! – noai

Verwandte Themen