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() ячейки. Изображение автоматически масштабируется в соответствии с областью отображения ячейки и перемещается вместе с ней.
В остальной части этой статьи рассматриваются оба подхода, объясняются соответствующие 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 (или откройте существующий).Worksheet из workbook.getWorksheets().get(0).InputStream (например, FileInputStream), используя блок try-with-resources, чтобы поток был корректно закрыт.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 (или откройте существующий).Worksheet из workbook.getWorksheets().get(0).byte[] (например, прочитав файл через Files.readAllBytes() из java.nio.file).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.