J'automatise un rapport Excel à l'aide de l'API POI pour Java. J'aurai quelques rapports à ma disposition que je lirai en utilisant POI, les traiterai et créerai un nouveau rapport Excel.

L'une des colonnes d'un fichier Excel a un temps total passé, c'est-à-dire qu'elle pourrait au format suivant, 46:23:12 - cela se lit comme 46 hours, 23 minutes and 12 seconds.

Je comprends comment lire les valeurs de date et d'heure et je les stocke généralement dans java.util.Date. Le problème ici est qu'il s'agit d'une durée, les heures passées pourraient être supérieures à 24. Quel type de données pourrait convenir à cela? Et comment puis-je lire ceci en utilisant POI?

4
Bharat Nanwani 19 juil. 2017 à 16:45

2 réponses

Les types de données pris en charge par Apache POI sont répertoriés ici .

Je recommanderais d'utiliser 0x15, "h: mm: ss" parmi tous.

Vous pouvez utiliser les deux blocs de code suivants pour lire et écrire. Mais après la lecture, vous devez analyser manuellement la chaîne.

Pour écrire le temps total passé dans un nouveau fichier:

final HSSFWorkbook workbook = new HSSFWorkbook();
final Sheet sheet = workbook.createSheet("SHEET ONE");

final CellStyle style = workbook.createCellStyle();
style.setDataFormat((short) 0x15);

final Row completeRow = sheet.createRow(0);
final Cell cell = completeRow.createCell(0);
cell.setCellValue("46:23:12");
cell.setCellStyle(style);

FileOutputStream fileOutputStream = new FileOutputStream(new File("/tmp/one.xls"));
workbook.write(fileOutputStream);
fileOutputStream.close();

Pour lire le temps total passé à partir d'un fichier existant:

FileInputStream fileInputStream = new FileInputStream("/tmp/one.xls");
HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
HSSFSheet sheet = workbook.getSheet("SHEET ONE");

for (Row row : sheet) {
    for (Cell cell : row) {
        final String stringCellValue = cell.getStringCellValue();

        System.out.println("stringCellValue = " + stringCellValue);
    }
}

fileInputStream.close();
0
taner 19 juil. 2017 à 14:46

Il existe une classe Période que vous pouvez utiliser dans Java 8 .

LocalDate startDate = LocalDate.of(year, month, day );
LocalDate endDate = new LocalDate(year, month, day);

Period diff = Period.between(startDate , endDate);

Bien sûr, j'ai manqué à quel point c'était environ heures, minutes et secondes.

Pour cela, il y a Durée .

Duration timeDiff = Duration.ofMillis( startTime.getTime() , endTime.getTime() );
1
dev8080 19 juil. 2017 à 14:00