Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Ajustar una imagen exactamente a una sola celda es un requisito común al diseñar hojas de cálculo que actúan como informes visuales, catálogos de productos, directorios de empleados, paneles o listas de inventario. En lugar de estirar una imagen a lo largo de muchas celdas o colocarla de forma dispersa en una hoja de cálculo, es posible que desee una imagen limpia y vinculada a la celda que permanezca alineada con la celda que la contiene. Aspose.Cells admite este escenario de dos formas complementarias:
Picture a la hoja de cálculo, establezca su placement en MoveAndSize, y ajuste sus celdas de anclaje (upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn) para que la imagen cubra exactamente una celda.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 usarlos en el código.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 agregada ocupa varias celdas.
Para que una imagen flotante cubra exactamente una celda, debe:
worksheet.pictures.add(row, column, stream), que ancla la nueva imagen a la celda indicada.picture.placement en PlacementType.MoveAndSize 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 la altura de fila.El anclaje de la imagen se define mediante cuatro propiedades de índice basadas en cero:
picture.upperLeftRow — el índice de fila del borde superior de la imagen.picture.upperLeftColumn — el índice de columna del borde izquierdo de la imagen.picture.lowerRightRow — 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 esto en r + 1.picture.lowerRightColumn — el índice de columna del borde derecho de la imagen. Para que el borde derecho de la imagen quede a la derecha de la columna c, establezca esto en c + 1.Los índices de fila y columna en Aspose.Cells están basados en cero. La celda C6 tiene el índice de fila 5 y el índice de columna 2. Los errores de desfase por uno en el anclaje inferior derecho son la fuente más común de imágenes que parecen superponerse a una celda adyacente.
picture.placement es una enumeración de tipo PlacementType que controla cómo se comporta la imagen cuando el usuario cambia el tamaño de la fila o la columna debajo de ella. El valor recomendado para una imagen de una sola celda es PlacementType.MoveAndSize, que hace que la imagen se mueva y cambie de tamaño junto con su celda subyacente, preservando el ajuste exacto.
Workbook (o abra uno existente).Worksheet de destino desde workbook.worksheets[0].worksheet.pictures.add(5, 2, stream) para agregar una imagen anclada a la celda C6. Capture la referencia del Picture devuelto.upperLeftRow = 5, upperLeftColumn = 2, lowerRightRow = 6, lowerRightColumn = 3.picture.placement = PlacementType.MoveAndSize para mantener la imagen alineada con C6 cuando se cambie el tamaño de la columna o la fila..xlsx.
El siguiente código demuestra el enfoque completo.const AsposeCells = require("aspose.cells");
const fs = require("fs");
const workbook = new AsposeCells.Workbook();
const worksheet = workbook.getWorksheets().get(0);
const fs_stream = fs.createReadStream("logo.png");
const picIndex = worksheet.getPictures().add(5, 2, fs_stream);
const picture = worksheet.getPictures().get(picIndex);
picture.setUpperLeftRow(5);
picture.setUpperLeftColumn(2);
picture.setLowerRightRow(6);
picture.setLowerRightColumn(3);
picture.setPlacement(AsposeCells.PlacementType.MoveAndSize);
workbook.save("output.xlsx", AsposeCells.SaveFormat.Xlsx);
Aspose.Cells también expone un mecanismo más simple para imágenes vinculadas a celdas: la propiedad cell.embeddedImage. Asignar bytes de imagen a esta propiedad adjunta la imagen a la celda misma, como si fuera contenido en línea.
cell.embeddedImage sea la opción más concisa cuando su objetivo es simplemente “una imagen que vive dentro de esta celda”.Workbook (o abra uno existente).Worksheet de destino desde workbook.worksheets[0].fs.readFileSync).worksheet.cells["C6"] o worksheet.cells[5, 2].embeddedImage de la celda..xlsx.
El siguiente código demuestra el enfoque completo.var workbook = new AsposeCells.Workbook();
var worksheet = workbook.getWorksheets().get(0);
// Get the target cell C6
var cell = worksheet.getCells().get("C6");
// Read the image file into a byte array
var imageData = fs.readFileSync("logo.png");
// Embed the image directly into the cell
cell.setEmbeddedImage(imageData);
// Optionally adjust row height and column width so the embedded image is more visible
worksheet.getCells().setColumnWidth(2, 30); // Column C (index 2)
worksheet.getCells().setRowHeight(5, 100); // Row 6 (index 5)
// Save the resulting workbook as an .xlsx file
workbook.save("output.xlsx", AsposeCells.SaveFormat.Xlsx);
Ambos enfoques producen una imagen que cabe dentro de una sola celda, pero difieren en cómo se almacena la imagen y cómo se comporta:
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.