2011-11-15 10 views
7

Puedo insertar una imagen en mi archivo de Excel usando jxl usando sheet.addImage(WritableImage obj). Mi problema es que se extiende según los argumentos de WritableImage. Me pregunto si hay una manera para que la imagen que inserto no se estire como si insertara una imagen de 200x200 que aparecería en la hoja como 200x200.Inserte la imagen en el archivo de Excel usando JXL sin estirarla

+0

@ king14nyr le parecieron una solución publicarlo Thankx – shareef

Respuesta

6

Por mucho que esto me haya molestado acerca de jxl, nunca he encontrado una manera de insertar una imagen sin asociar la relación de aspecto a las celdas en lugar de píxeles/pulgadas/cualquier unidad de medida estándar, y he hecho decente investigación en el pasado al hacerlo.

Lo mejor que puede hacer es adaptar las imágenes a la altura/anchura de las celdas que lo está insertando en, o incluso mejor, establezca la célula anchura/altura de las células que están poniendo la imagen en.

Desde el JExcel FAQ- http://jexcelapi.sourceforge.net/resources/faq/

private static final double CELL_DEFAULT_HEIGHT = 17; 
private static final double CELL_DEFAULT_WIDTH = 64; 

File imageFile = new File(GIF_OR_JPG_IMAGE_FILE); 
BufferedImage input = ImageIO.read(imageFile); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(input, "PNG", baos); 
sheet.addImage(new WritableImage(1,1,input.getWidth()/CELL_DEFAULT_WIDTH, 
    input.getHeight()/CELL_DEFAULT_HEIGHT,baos.toByteArray())); 

para mantener la relación de aspecto, usted también desea establecer el WritableImage a no cambiar el tamaño si el usuario cambia la altura de la fila o el ancho de la columna. Hacer esto con cualquiera de los siguientes (su preferencia basa en si desea que el anclaje de imagen bloqueado o se mueva con el cambio de tamaño):

WritableImage.MOVE_WITH_CELLS; 
WritableImage.NO_MOVE_OR_SIZE_WITH_CELLS; 
+0

Gracias por su respuesta! Creo que no puedo aplicarlo a mi situación actual, ya que el ancho y la altura de la columna están sujetos a la longitud de la palabra más larga en la misma columna donde necesito poner una imagen. Pero aprecio mucho tu respuesta. – Jemp

+0

No hay problema, esta situación me ha pasado antes también. Lo anterior funciona SI se puede arreglar el ancho/alto de las celdas, pero en el caso de que no se pueda (como cuando se establece AUTOSIZE en verdadero en las columnas), no he encontrado la manera de hacerlo. Si encuentra una forma de hacerlo en jxl, asegúrese de publicar aquí, ya que puede ayudar a otros. – king14nyr

+0

@ king14nyr encontró una solución, por favor publíquela thankx – shareef

0

En realidad, esto es posible. Supongamos que el ancho de la imagen que desea incluir es 4000. A continuación, haga lo siguiente:

CellView cv = excelSheetTemp.getColumnView(0); 
//get the width of the column where you want to insert the picture 
int width = forLogo.getSize(); 
//if the width is less than the size you want, set the column width to 
//the width. This will ensure that your image does not shrink 
if (width < 4000) { 
    forLogo.setSize(4000); 
    excelSheetTemp.setColumnView(0, cv); 
    width = 4000; 
} 
double c = 4000/width; 
WritableImage im = new WritableImage(0, 1, c, 3, the image file); 
excelSheetTemp.addImage(im); 
Cuestiones relacionadas