2012-05-16 16 views
10

Utilizzo la libreria apache poi per leggere il file excel. Sono bloccato durante la lettura della cella della password. Se l'utente fornisce la data come password nella cella della password, ovvero il 16/05/2012. Sto leggendo questo valore come "41045" mentre il valore dovrebbe essere "16/05/2012". Questo è il mio codice:Valore di data di lettura dalla cella Excel come stringa

cell = row.getCell(); // date in the cell password '16/05/2012' 
switch (cell.getCellType()) { 

case HSSFCell.CELL_TYPE_STRING: 
    cellValue = cell.getRichStringCellValue().getString(); 
    break; 
case HSSFCell.CELL_TYPE_NUMERIC: 
    if(cellCount == TEMPLATE_PASSWORD) {// if cell is password 
     cell.setCellType(Cell.CELL_TYPE_STRING); 
     cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012" 
    } 
    break; 
default: 
} 

qualcuno può aiutare in questo?

Grazie.

+0

dai un'occhiata a questo thread, è quasi lo stesso con il tuo problema. http://stackoverflow.com/questions/3148535/how-to-read-excel-cell-having-date-with-apache-poi –

+0

@mashhur sul tuo link, non esiste una soluzione secondo il mio requisito. –

+0

Penso che tu riceva numero anziché stringa perché il tipo di cella è numerico. Sei sicuro che il tipo numerico sia corretto per la cella della password? – ImLearning

risposta

14

La classe che stai cercando in POI è DataFormatter

Quando Excel scrive il file, alcune cellule vengono memorizzati come stringhe letterali, mentre altri sono memorizzati come numeri (comprese le date). Per quest'ultimo, un valore a virgola mobile che rappresenta la cella viene archiviato nel file, quindi quando chiedi a POI il valore della cella è ciò che effettivamente ha.

A volte, però, soprattutto quando si fa estrazione del testo (ma non sempre), si vuole fare il valore della cella guardare come si fa in Excel. Non è sempre possibile ottenerlo esattamente in una stringa (ad esempio, spazio vuoto non completo), ma la classe DataFormatter ti farà avvicinare.

Si noti inoltre che in Excel, le date vengono memorizzate come numeri in virgola dal ~ 1900 galleggiante, che è il motivo per cui si sta vedendo un numero non una data. Utilizzare DataFormatter (o simile) per ottenere che sia interpretato come una data

+0

Bene, ho controllato DataFormatter, formatterò la stringa della data cioè "41045" in " 16/05/2012" . Ma cosa succede se l'utente inserisce stringa come "16/05/2012"? qui avrò la stessa stringa di data "41045" ma secondo la logica convertirà in "16/05/2012" e non in "16/05/2012". O come faccio a sapere in che formato viene inserito l'utente? –

+0

Quando l'utente immette un valore nella cella, viene applicato un formato (automaticamente o esplicitamente), che è ciò che viene utilizzato per il rendering. DataFormatter renderà semplicemente la cella basata su qualunque sia quel formato. – Gagravarr

4

Il prefisso del valore della cella con un 'mentre lo si salva in xls lo esegue in una cella stringa. Quindi, qualsiasi cosa tu legga da quella cella sarà trattata come una stringa e letta com'è.

+1

Questa soluzione richiede che l'utente, che inserisce i dati, sappia e ricordi ciò per il programma (di cui potrebbero non essere a conoscenza) – Attila

5

utilizzare il codice sottostante per ottenere la data esatta formiato come u indicato in foglio Excel.

DataFormatter df = new DataFormatter(); 
stringCellValue = df.formatCellValue(cell); 
+0

Questo è ciò che chiamo una risposta pratica. Grazie! –

Problemi correlati