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 на рабочий лист, установите его setPlacement в MOVE_AND_SIZE и настройте ячейки его привязки (setUpperLeftRow, setUpperLeftColumn, setLowerRightRow, setLowerRightColumn) так, чтобы изображение покрывало ровно одну ячейку.setEmbeddedImage. Изображение автоматически масштабируется, чтобы соответствовать области отображения ячейки, и перемещается вместе с ячейкой.
Остальная часть статьи рассматривает оба подхода, объясняет соответствующие API и показывает, как использовать их в коде.Плавающее изображение — это объект Picture, который находится на слое рисования рабочего листа. Хотя оно не принадлежит какой-либо одной ячейке, оно привязано к диапазону ячеек. Ячейки привязки изображения — его верхний левый и нижний правый углы — определяют его визуальную протяжённость на рабочем листе. По умолчанию только что добавленное изображение охватывает несколько ячеек.
Чтобы плавающее изображение покрывало ровно одну ячейку, необходимо:
Worksheet.getPictures().add(int row, int column, InputStream stream), что привязывает новое изображение к указанной ячейке.Picture.setPlacement в PlacementType.MOVE_AND_SIZE, чтобы изображение перемещалось и изменяло размер вместе с базовой ячейкой, когда пользователь изменяет ширину столбца или высоту строки.Привязка изображения определяется четырьмя свойствами индексов, начинающихся с нуля:
setUpperLeftRow — индекс строки верхнего края изображения.setUpperLeftColumn — индекс столбца левого края изображения.setLowerRightRow — индекс строки нижнего края изображения. Чтобы нижний край изображения оказался у нижней границы строки r, установите это значение в r + 1.setLowerRightColumn — индекс столбца правого края изображения. Чтобы правый край изображения оказался у правой границы столбца c, установите это значение в c + 1.Индексы строк и столбцов в Aspose.Cells начинаются с нуля. Ячейка C6 имеет индекс строки 5 и индекс столбца 2. Ошибки смещения на единицу в нижней правой привязке — самая распространённая причина того, что изображения, как кажется, перекрывают соседнюю ячейку.
getPlacement — это перечисление типа PlacementType, которое управляет поведением изображения при изменении пользователем размера находящейся под ним строки или столбца. Рекомендуемое значение для изображения в одной ячейке — PlacementType.MOVE_AND_SIZE, благодаря которому изображение перемещается и изменяет размер вместе с базовой ячейкой, сохраняя точное соответствие.
Workbook (или откройте существующий).Worksheet через workbook.getWorksheets().get(0).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 jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, SaveFormat, PlacementType
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
FileInputStream = jpype.JClass("java.io.FileInputStream")
fs = FileInputStream("logo.png")
try:
picIndex = worksheet.getPictures().add(5, 2, fs)
picture = worksheet.getPictures().get(picIndex)
picture.setUpperLeftRow(5)
picture.setUpperLeftColumn(2)
picture.setLowerRightRow(6)
picture.setLowerRightColumn(3)
picture.setPlacement(PlacementType.MoveAndSize)
finally:
fs.close()
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
Aspose.Cells также предоставляет более простой механизм для изображений, привязанных к ячейкам, — свойство Cell.setEmbeddedImage. Присвоение байтов изображения этому свойству прикрепляет изображение к самой ячейке, как если бы оно было встроенным содержимым.
Cell.setEmbeddedImage наиболее лаконичным вариантом, когда ваша цель проста — «изображение, которое живёт внутри этой ячейки».Workbook (или откройте существующий).Worksheet через workbook.getWorksheets().get(0).byte[] (например, вызовом Files.readAllBytes из java.nio.file.Files).worksheet.getCells().get("C6"), либо через worksheet.getCells().get(5, 2).setEmbeddedImage..xlsx.
Следующий код демонстрирует полный подход.Оба подхода дают изображение, помещающееся в одну ячейку, но они различаются способом хранения изображения и его поведением:
PictureCollection.import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook, SaveFormat
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
# Get the target cell C6
cell = worksheet.getCells().get("C6")
# Read the image file into a byte array
imageData = open("logo.png", "rb").read()
# 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)
jpype.shutdownJVM()
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.