2011-06-28 289 views
8

Necesito generar un archivo .xls (Excel), usando la biblioteca Java Apache POI for spreadsheets.POI de Apache para Excel: configuración del tipo de celda para "texto" para una columna completa

El archivo contendrá una lista de números de teléfono en la columna A, formateados como "0221 ...." o "+49221 ..." - por lo que Excel los interpreta de forma predeterminada como celdas numéricas. Esto es malo, porque el 0 o el + se recortarán.

Para resolver el problema, puedo usar cell.setCellType(Cell.CELL_TYPE_STRING), que funciona bien, pero solo para las celdas específicas para las que configuré esto.

¿Cómo puedo aplicar esta configuración para toda la columna (es decir, incluso para todas las celdas restantes, donde el usuario ingresará números de teléfono adicionales)?

En Excel, esto es posible: Selección de toda la columna, y se aplica el tipo de célula (el ajuste sobrevive guardar/cargar el archivo.)

Pero no puedo encontrar el método correcto para el PDI.

  • Primero asumí, debería ser algo así como sheet.setDefaultCellType(int colNum). Pero no puedo encontrar nada como esto (probablemente estoy ciego? Hay muchos similar methods en la biblioteca para aplicar estilos de texto como "alinear centro", etc.)
  • Entonces pensé: Quizás solo se puede aplicar a un NamedRange o algo similar, pero no he logrado averiguar cómo funciona esto ...

Respuesta

10

¿Va a ayudar this ayuda?

Mediante la creación de un formato de datos con el símbolo @ y el uso que en un objeto CellStyle que se pasa a continuación al método setDefaultColumnStyle(), fue posible establecer el tipo de datos predeterminado de la columna a, en este caso, texto. No he experimentado más pero sospecho que sería posible hacer algo similar con otros objetos de estilo para establecer el tipo predeterminado numérico o incluso un formato personalizado, como la moneda.

+0

¡Eso se ve bien! Tan pronto como regrese al proyecto, probaré esta solución. ¡Gracias! –

+0

Esto funciona ... ¡Gracias! – jahroy

+0

Hice lo mismo. var cllstyl = this.Workbook.CreateCellStyle(); var workbook = new HSSFWorkbook(); var currDataFormat = workbook.CreateDataFormat(); cllstyl.DataFormat = currDataFormat.GetFormat ("@"); sheet.SetDefaultColumnStyle (1, cllstyl); Pero no muestra el formato "Texto", sino que muestra "Fecha". Por favor ayúdame con esto. –

16

Aquí hay un código de ejemplo inspirado por la respuesta de Vlad:

DataFormat fmt = workbook.createDataFormat(); 
CellStyle textStyle = workbook.createCellStyle(); 
textStyle.setDataFormat(fmt.getFormat("@")); 
worksheet.setDefaultColumnStyle(0, textStyle); 

El código anterior establece el estilo predeterminado de la primera columna de la hoja de trabajo a TEXTO.

Gracias, Vlad!

+4

+1 para mostrar el código real. – Magnilex

+0

Muchas gracias, funcionó para mí :) –

0

Vlad: Esto solucionó casi todo el problema. Descubrí que todas las filas vacías estaban formateadas como yo las quería. Sin embargo, las filas donde tenía ceros iniciales se veían y funcionaban bien; sin embargo, si tuviera que cambiar un valor preexistente con otro valor comenzando por cero, los ceros desaparecieron. Por lo tanto, recomiendo agregar código al crear el valor en la celda para restablecer el setCellStyle a texto. Éstos son algunos fragmentos: método celular pública createCell (fila r !, celular BBjNumber, BBjString valor!)

c!=#this!.createCell(r!, cell) 
c!.setCellValue(value!) 
c!.setCellStyle(#text_format!) 

methodret c!

#text_format! = #wb!.createCellStyle() 
#text_format!.setDataFormat(#format!.getFormat("@")) 

methodend

esto puede ayudar a alguna otra búsqueda exclusiva de ceros iniciales. Gracias por publicar. Alex

Cuestiones relacionadas