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