2011-04-25 21 views
7

Sé que podemos obtener el número máximo de columnas iterando sobre todas las filas y llamando al getLastCellNumber en cada objeto de fila ... pero este enfoque requiere iterar sobre todas las filas que quiero evitar ya que llevará mucho tiempo para los archivos con un millón de filas (ese es el tipo de archivos que espero que se lean).Cómo obtener el máximo no. de columnas llenas en un archivo XLSX usando POI?

Cuando POI lee un archivo de Excel, almacena las dimensiones de la hoja (primer número de fila, último número de fila, primer número de columna, último número de columna) en un objeto de la clase DimensionsRecord. Entonces, si obtengo este objeto, obtendré lo que necesito. Estos objetos se pueden obtener de la clase Sheet, que es una clase interna de POI. Pude extraer lo que necesito para los archivos XLS, pero me he topado con un obstáculo para los archivos XLSX.

¿Los puntos de interés también mantienen el objeto DimensionsRecord para XLSX ?, si es así, ¿alguien ha intentado extraerlo? ¿O hay algún otro por el cual esto se puede hacer? ¡por favor ayuda!

También quería preguntar, si mi enfoque es correcto o no, es decir, estoy usando las clases internas de POI (estoy haciendo mi trabajo), ¿es correcto o debería depender únicamente de las API expuestas (también el tiempo consumidor).

Respuesta

3

También hay un objeto de dimensión en Hojas XSSF. Proveedores:

CTSheetDimension dimension = sheet.getCTWorksheet().getDimension(); 
String sheetDimensions = dimenson.getRef(); 

La única cuestión que viene a la mente es que no estoy seguro de si se requiere para la dimensión (CTDimensions o DimensionsRecord) para ser siempre correcta ...

+0

Gracias @Gagravarr por la respuesta. . Lo probé y está funcionando bien ... aunque no entiendo por qué CTDimensions puede estar equivocado ... ¿pueden decir cuán dañino puede ser usar esto ... también para extraer DimensionsRecord? Tengo un procedimiento muy largo (aproximadamente 30 líneas de código) Lo estoy haciendo mediante la creación de objetos de hoja interna de POI y luego obtengo DimensionsRecord de la lista de registros ... ¿hay alguna forma de hacerlo como lo hizo con XLSX CTDimensions? – rirhs

+0

Excel ciertamente debe mantener los registros actualizados, pero no estoy seguro si otros programas lo harán. Vea la línea 387 de hssf.model.InternalSheet para que todos los comentarios sobre el mismo no estén siempre allí/siendo actualizados. Para obtener un DimensionsRecord, querrá tomar los registros de InternalSheet. – Gagravarr

+0

Revisé el código fuente de la hoja interna (poi lib 3.7), revise este enlace http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi/3.7/org/apache/ poi/hssf/model/InternalSheet.java # InternalSheet aquí arriba de la línea 531 a comments indica que el registro de dimensión está configurado correctamente. – rirhs

Cuestiones relacionadas