Pregunta

Tengo una hoja de cálculo vacía, pero cuando estoy acceder a él con Apache POI (versión 3.10), se dice que tiene 1024 columnas y 20 de física columnas.
Yo realmente eliminado todas las células, sólo algún formato sigue siendo, pero no de contenido.
Y si puedo eliminar algunas de las columnas con LibreOffice Calc (versión 4.1.3.2), el número de columnas sólo aumenta!¿Qué está pasando?
¿Hay una manera fiable para conocer el verdadero número de columnas (o las celdas de una fila)?

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());
    }
}
¿Fue útil?

Solución

Después de algo más de investigación, creo que he entendido lo que está sucediendo.

En primer lugar, parte de la terminología de la PDI:hay algunas células que realmente no existen en absoluto en la hoja de cálculo - los que son llamados falta, o indefinido/no definida.A continuación hay algunas células que están definidos, pero no tienen valor son las llamadas en blanco de las células.Ambos tipos de células aparecen vacíos en un programa de hoja de cálculo y no puede distinguirse visualmente.

Mi hoja de cálculo tiene algunas celdas en blanco que LibreOffice se agregan al final de la fila (posiblemente un error).Cuando puedo eliminar columnas, LibreOffice parece el cambio posterior de las células (incluyendo el espacio en blanco) a la izquierda, y añade más celdas en blanco en el final (hasta 1024).

Y ahora la parte clave:ni getLastCellNum() ni getPhysicalNumberOfCells() ignorar las celdas en blanco. getLastCellNum() da el último definido de la célula, y getPhysicalNumberOfCells() da el número de definido células, incluyendo las celdas en blanco.No parece ser de cualquier método disponible que se salta las celdas en blanco.El javadoc de getPhysicalNumberOfCells() es un poco engañoso, "si sólo las columnas 0,4,5 tienen valores, no sería de 3", pero en realidad es la de contar las celdas en blanco, que en realidad no tienen valores.

Así que la única solución que he encontrado es un bucle a través de las células y comprobar si están en blanco.

Nota al margen: getLastRowNum() y getFirstCellNum() está basado en 0 pero getLastCellNum() 1, wtf?

Otros consejos

Más probable es que usted tiene algún tipo de formato que se aplica para usted fila.Tengo un vacío xlsx archivo creado con excel y el método getRow produce null para las filas vacías.

@aditsu según HTTPS: //poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/row.html , getlascellnum () obtiene el índice de la última celda contenida en esta fila más una.

+1 para LibreOffice Strugle!Es un error, y en mi opinión es muy aleatorio.Me estoy poniendo nulo al azar, y a menudo ayuda si eliminé las filas vacías (más abajo) y las columnas vacías (en el lado derecho). ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top