2012-03-07 42 views
5

Si agrieto MS Excel (supongo) o LibreOffice Calc (probado), puedo escribir cosas en una celda y cambiar la fuente de las partes del texto en una celda, como haciendo, en una celda,:Apache POI: fuentes Partial Cell

este texto está en negrita yeste texto está en cursiva

una vez más, quisiera reiterar, que esta cadena podría existir en el formato que se muestra en una celda.

¿Se puede alcanzar este nivel de personalización con Apache POI? La búsqueda solo muestra cómo aplicar una fuente a una celda completa.

Gracias

ACTUALIZACIÓN === ===

Como se sugiere a continuación, terminé yendo con el HSSFRichTextString (como yo estoy trabajando con HSSF). Sin embargo, después de aplicar las fuentes (intenté en negrita y subrayado), mi texto permanecería sin cambios. Esto es lo que intenté. Para poner las cosas en contexto, estoy trabajando en algo relacionado con los deportes, en el que es común mostrar una coincidencia en el formulario "awayteam" @ "hometeam", y dependiendo de ciertas condiciones externas, me gustaría hacer una o el otro negrita Mi código es como la siguiente:

String away = "foo"; 
    String home = "bar"; 
    String bolden = "foo" 
    HSSFRichTextString val = new HSSFRichTextString(away+"@"+home); 

    if(bolden.equals(home)) { 
     val.applyFont(val.getString().indexOf("@") + 1, val.length(), Font.U_SINGLE); 
    } else if(bolden.equals(away)) { 
     val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE); 
    } 
    gameHeaderRow.createCell(g + 1).setCellValue(val); 

Como se puede ver, este es un fragmento de código de una función más complicada de lo que se muestra, pero la peor parte de esto es código real. Como puede ver, estoy val.applyFont como parte de una cadena, y luego establezco un valor de celda con la cadena. Así que no estoy del todo seguro de lo que hice mal allí. Cualquier consejo es apreciado.

Gracias

KFJ

Respuesta

5

PDI lo soporta, la clase que estás buscando es RichTextString. Si su celda es de texto, puede obtener un RichTextString y luego aplicar las fuentes a diferentes partes para hacer que diferentes partes del texto se vean diferentes.

+0

gracias por responder a mi pregunta. Estoy en el trabajo, y esto es para un proyecto paralelo, así que intentaré esto esta noche, y si funciona, marcaré su respuesta :) –

+0

Wow. Eso llevó mucho más tiempo de lo que esperaba. Lo siento por eso. De todos modos, no funcionó. Sin errores ni nada, pero el texto permaneció sin formato. Editaré mi publicación aquí y te mostraré lo que está sucediendo. –

+0

Si aplica esa fuente a toda la celda (a través de un estilo), ¿se ve como espera? (Esa sería una buena manera de verificar que tenga la fuente correcta) – Gagravarr

1

Estará agotado si trabaja con SXSSFWorkbook, ya que no admite dicho formato. Compruébelo aquí. http://apache-poi.1045710.n5.nabble.com/RichTextString-isn-t-working-for-SXSSFWorkbook-td5711695.html

+0

Agradezco el comentario, y quiero mantener este hilo actualizado, pero esta es una pregunta antigua, y ya tiene una respuesta aceptada.Siempre soy bienvenido a los nuevos miembros del universo de StackExchange, pero es posible que desee hacer clic en "Ayuda" -> "Hacer un recorrido" en la parte superior de la página. –

+0

¡Gracias, papilla por esto! Entiendo que en realidad debería ser un comentario y no da respuesta a la pregunta, pero me salvó la noche. Muchas gracias! – bsiamionau

0
val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE); 

No debe pasar Font.U_SINGLE-applyFont, pero una fuente nueva, como new HSSFFont(), entonces setUnderline(Font.U_SINGLE).

ejemplo:

HSSFFont f1 = new HSSFFont(); 
f1.setUnderline(Font.U_SINGLE); 
val.applyFont(0, val.getString().indexOf("@"), f1); 
Cuestiones relacionadas