Insertar una imagen en una celda

Introducción

Ajustar una imagen exactamente a una sola celda es un requisito habitual al diseñar hojas de cálculo que actúan como informes visuales, catálogos de productos, directorios de empleados, paneles de control o listas de inventario. En lugar de estirar una imagen a través de muchas celdas o colocarla de forma suelta en una hoja de cálculo, es posible que desee una imagen limpia y ligada a la celda que permanezca alineada con la celda a la que pertenece. Aspose.Cells admite este escenario de dos formas complementarias:

  • Enfoque 1 — Colocar una imagen flotante sobre una celda. Añada una Picture a la hoja de cálculo, establezca su Placement como MoveAndSize y ajuste sus celdas de anclaje (UpperLeftRow, UpperLeftColumn, LowerRightRow, LowerRightColumn) para que la imagen cubra exactamente una celda.
  • Enfoque 2 — Incrustar una imagen directamente en una celda. Asigne bytes de imagen a la propiedad EmbeddedImage de la celda. La imagen se escala automáticamente para ajustarse al área de visualización de la celda y viaja con ella. El resto de este artículo recorre ambos enfoques, explica las API relevantes y muestra cómo usarlas en código.

Enfoque 1: Colocar una imagen sobre una celda

Una imagen flotante es un objeto Picture que reside en la capa de dibujo de la hoja de cálculo. Aunque no forma parte de ninguna celda individual, está anclada a un rango de celdas. Las celdas de anclaje de la imagen — sus esquinas superior izquierda e inferior derecha — determinan su extensión visual en la hoja de cálculo. Por defecto, una imagen recién añadida abarca varias celdas. Para hacer que una imagen flotante cubra exactamente una celda, debe:

  1. Añadir la imagen usando worksheet.getPictures().add(int row, int column, InputStream stream), que ancla la nueva imagen a la celda indicada.
  2. Establecer las cuatro propiedades de anclaje para que el rectángulo delimitador de la imagen coincida con la celda objetivo.
  3. Establecer picture.setPlacement(PlacementType.MOVE_AND_SIZE) para que la imagen se mueva y cambie de tamaño junto con la celda subyacente cuando el usuario modifique el ancho de columna o el alto de fila.

Anclar la imagen a una sola celda

El anclaje de la imagen está definido por cuatro propiedades de índices basados en cero:

  • picture.setUpperLeftRow(int) — el índice de fila del borde superior de la imagen.
  • picture.setUpperLeftColumn(int) — el índice de columna del borde izquierdo de la imagen.
  • picture.setLowerRightRow(int) — el índice de fila del borde inferior de la imagen. Para que el borde inferior de la imagen quede en la parte inferior de la fila r, establezca este valor en r + 1.
  • picture.setLowerRightColumn(int) — el índice de columna del borde derecho de la imagen. Para que el borde derecho de la imagen quede en la parte derecha de la columna c, establezca este valor en c + 1.