Domanda

Ho un foglio di calcolo vuoto, ma quando ho accesso Apache poi (versione 3.10), si dice che ha 1024 colonne e 20 colonne fisiche.
Ho proprio eliminato tutte le cellule, solo un po ' di formattazione rimane, ma non il contenuto.
E se io eliminare alcune colonne con LibreOffice Calc (versione 4.1.3.2), il numero di colonne solo aumenta!Che cosa sta succedendo?
C'è un modo affidabile per ottenere il reale numero di colonne (o le celle in una riga)?

import java.net.URL;
import org.apache.poi.ss.usermodel.*;

public class Test {
    public static void main(final String... args) throws Exception {
        final URL url = new URL("http://aditsu.net/empty.xlsx");
        final Workbook w = WorkbookFactory.create(url.openStream());
        final Row r = w.getSheetAt(0).getRow(0);
        System.out.println(r.getLastCellNum());
        System.out.println(r.getPhysicalNumberOfCells());
    }
}
È stato utile?

Soluzione

Dopo alcuni ulteriori indagini, penso di aver capito cosa sta succedendo.

In primo luogo, alcuni terminologia dei PDI:ci sono alcune cellule che in realtà non esiste nel foglio di calcolo - coloro che sono chiamati mancanti, o undefined/non definito.Poi ci sono alcune cellule che sono definiti, ma non hanno alcun valore - coloro che sono chiamati vuoto le cellule.Entrambi i tipi di celle vuote in un programma di foglio di calcolo e non si possono distinguere visivamente.

Il mio foglio di calcolo di alcune celle vuote che LibreOffice aggiunto alla fine della riga (forse un bug).Quando si elimina colonne, LibreOffice sembra turno successivo cellule (compresi quelli in bianco) a sinistra, e aggiunge più celle vuote alla fine (fino a 1024).

E ora la parte fondamentale:né getLastCellNum()getPhysicalNumberOfCells() ignora celle vuote. getLastCellNum() dà l'ultimo definito cella, e getPhysicalNumberOfCells() restituisce il numero di definito cellule, tra cui le celle vuote.Non sembra essere qualsiasi metodo disponibile, che ignora celle vuote.Javadoc getPhysicalNumberOfCells() è un po ' fuorviante - "se solo le colonne 0,4,5 valori, allora non ci sarebbero 3", ma in realtà il conteggio delle celle vuote, che non hanno valori.

Quindi l'unica soluzione che ho trovato è quello di loop attraverso le cellule e verificare se sono vuote.

Nota a margine: getLastRowNum() e getFirstCellNum() sono basato su 0 ma getLastCellNum() 1-base, wtf?

Altri suggerimenti

Molto probabilmente hai qualche tipo di formattazione applicata per la tua riga.Ho un file XLSX vuoto creato con Excel e Metodo getRow produce NULL per righe vuote.

@aditsu come a https://Poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/row.html , getlastcellnum () Ottiene l'indice dell'ultima cella contenuta in questa riga più uno.

+1 per LibreOffice Struggle!È un bug, e a mio parere è molto casuale.Sto diventando nulla in modo casuale, e spesso aiuta se eliminisco le righe vuote (muggito) e le colonne vuote (sul lato destro). ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top