Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells 提供了两种不同的方式将图片与单个单元格关联。浮动图片是工作表绘图层上的一个图形,它在视觉上覆盖在单元格区域上方;而嵌入图片则存储在单元格内部,并会自动缩放以适应单元格的显示区域。请选择最适合您布局需求的方式。
在设计作为可视化报表、产品目录、员工通讯录、仪表板或库存清单的电子表格时,将图片精确地放入单个单元格是一个常见需求。与其让图片跨越多个单元格或松散地放置在工作表上,您可能更希望拥有一张干净、与单元格绑定、并始终与其所属单元格对齐的图片。 Aspose.Cells 通过两种互补的方式支持此场景:
Picture,将其 Placement 设置为 MOVE_AND_SIZE,并调整其锚定单元格(getUpperLeftRow、getUpperLeftColumn、getLowerRightRow、getLowerRightColumn),使图片恰好覆盖一个单元格。getEmbeddedImage() setter。图片会自动缩放以适应单元格的显示区域,并随单元格一起移动。
本文后续内容将逐步介绍这两种方法,解释相关的 API,并展示如何在代码中使用它们。浮动图片是位于工作表绘图层上的 Picture 对象。虽然它不属于任何一个单元格,但它锚定在一个单元格区域上。图片的锚定单元格——即其左上角和右下角——决定了图片在工作表上的视觉范围。默认情况下,新添加的图片会跨越多个单元格。
若要使浮动图片恰好覆盖一个单元格,您需要:
Worksheet.getPictures().add(int row, int column, InputStream stream) 添加图片,该方法会将新图片锚定到指定的单元格。Picture.setPlacement() 设置为 PlacementType.MOVE_AND_SIZE,以便在用户更改列宽或行高时,图片能够随其下方的单元格一起移动和调整大小。图片的锚点由四个从零开始的索引属性定义:
Picture.getUpperLeftRow() — 图片顶部边缘的行索引。Picture.getUpperLeftColumn() — 图片左侧边缘的列索引。Picture.getLowerRightRow() — 图片底部边缘的行索引。若希望图片的底部边缘位于第 r 行的底部,请将此值设置为 r + 1。Picture.getLowerRightColumn() — 图片右侧边缘的列索引。若希望图片的右侧边缘位于第 c 列的右侧,请将此值设置为 c + 1。Aspose.Cells 中的行和列索引从零开始。单元格 C6 的行索引为 5,列索引为 2。在右下角锚点上出现差一错误是导致图片看似与相邻单元格重叠的最常见原因。
Picture.getPlacement() 返回一个 PlacementType 类型的枚举,用于控制当用户调整图片下方行高或列宽时图片的行为。对于单个单元格的图片,推荐的取值是 PlacementType.MOVE_AND_SIZE,它会使图片与其下方的单元格一起移动和调整大小,从而保持精确的适配。
Workbook(或打开现有的工作簿)。workbook.getWorksheets().get(0) 获取目标 Worksheet。InputStream(例如 FileInputStream),以确保流被正确关闭。worksheet.getPictures().add(5, 2, stream) 添加一张锚定到 C6 单元格的图片,并捕获返回的 Picture 引用。setUpperLeftRow(5)、setUpperLeftColumn(2)、setLowerRightRow(6)、setLowerRightColumn(3)。picture.setPlacement(PlacementType.MOVE_AND_SIZE),以便在调整列宽或行高时图片始终与 C6 单元格保持对齐。.xlsx 文件。
以下代码演示了完整的方法。import com.aspose.cells.*;
import java.io.FileInputStream;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
try (FileInputStream fs = new FileInputStream("logo.png"))
{
int picIndex = worksheet.getPictures().add(5, 2, fs);
Picture picture = worksheet.getPictures().get(picIndex);
picture.setUpperLeftRow(5);
picture.setUpperLeftColumn(2);
picture.setLowerRightRow(6);
picture.setLowerRightColumn(3);
picture.setPlacement(PlacementType.MOVE_AND_SIZE);
}
workbook.save("output.xlsx", SaveFormat.XLSX);
Aspose.Cells 还提供了一种更简单的机制来实现与单元格绑定的图片:Cell.setEmbeddedImage(byte[]) 方法。将图片字节分配给此属性,会将图片附加到单元格本身,就像它是内联内容一样。
setEmbeddedImage() 是最简洁的选择。Workbook(或打开现有的工作簿)。workbook.getWorksheets().get(0) 获取目标 Worksheet。byte[] 数组中(例如,使用 java.nio.file 中的 Files.readAllBytes() 读取文件)。worksheet.getCells().get("C6") 或 worksheet.getCells().get(5, 2)。cell.setEmbeddedImage(bytes) 将字节数组分配给单元格。.xlsx 文件。
以下代码演示了完整的方法。import com.aspose.cells.*;
import java.nio.file.Files;
import java.nio.file.Paths;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
// Get the target cell C6
Cell cell = worksheet.getCells().get("C6");
// Read the image file into a byte array
byte[] imageData = Files.readAllBytes(Paths.get("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", SaveFormat.XLSX);
两种方法都能生成一张恰好放入单个单元格的图片,但它们在图片的存储方式和行为上有所不同:
PictureCollection 的代码保持向后兼容。Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.