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 равным MoveAndSize и настройте ячейки привязки (UpperLeftRow, UpperLeftColumn, LowerRightRow, LowerRightColumn) так, чтобы рисунок закрывал ровно одну ячейку.EmbeddedImage. Изображение автоматически масштабируется по области отображения ячейки и перемещается вместе с ячейкой.
Далее в этой статье рассматриваются оба подхода, объясняются соответствующие API и демонстрируется их использование в коде.Плавающий рисунок — это объект Picture, который находится на слое рисунков рабочего листа. Хотя он не принадлежит какой-либо одной ячейке, он привязан к диапазону ячеек. Ячейки привязки рисунка — его верхний левый и нижний правый углы — определяют его визуальные границы на рабочем листе. По умолчанию только что добавленный рисунок занимает несколько ячеек.
Чтобы плавающий рисунок закрывал ровно одну ячейку, необходимо:
Worksheet.Pictures.Add(int row, int column, Vector<uint8_t> stream), который привязывает новый рисунок к указанной ячейке.Picture.Placement равным PlacementType.MoveAndSize, чтобы рисунок перемещался и изменял размер вместе с базовой ячейкой при изменении пользователем ширины столбца или высоты строки.Привязка рисунка определяется четырьмя свойствами с нулевой индексацией:
Picture.UpperLeftRow — индекс строки верхнего края рисунка.Picture.UpperLeftColumn — индекс столбца левого края рисунка.Picture.LowerRightRow — индекс строки нижнего края рисунка. Чтобы нижний край рисунка располагался внизу строки r, задайте значение r + 1.Picture.LowerRightColumn — индекс столбца правого края рисунка. Чтобы правый край рисунка располагался справа от столбца c, задайте значение c + 1.Индексы строк и столбцов в Aspose.Cells являются нулевыми (начинаются с нуля). Ячейка C6 имеет индекс строки 5 и индекс столбца 2. Ошибки смещения на единицу в привязке нижнего правого края — наиболее распространённая причина появления рисунков, перекрывающих соседнюю ячейку.
Picture.Placement — это перечисление типа PlacementType, которое управляет поведением рисунка при изменении пользователем размера строки или столбца под ним. Рекомендуемое значение для рисунка в одной ячейке — PlacementType.MoveAndSize, которое обеспечивает перемещение и изменение размера рисунка вместе с базовой ячейкой, сохраняя точное соответствие.
Workbook (или откройте существующий).Worksheet из workbook.GetWorksheets().Get(0].Vector<uint8_t>, чтобы байты изображения были доступны API.worksheet.Pictures.Add(5, 2, imageData), чтобы добавить рисунок, привязанный к ячейке C6. Сохраните возвращённую ссылку на Picture.UpperLeftRow = 5, UpperLeftColumn = 2, LowerRightRow = 6, LowerRightColumn = 3.picture.Placement = PlacementType.MoveAndSize, чтобы рисунок оставался выровненным относительно C6 при изменении размера столбца или строки..xlsx.
Следующий код демонстрирует полный подход.#include "Aspose.Cells.h"
#include <fstream>
#include <vector>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook workbook;
Worksheet worksheet = workbook.GetWorksheets().Get(0);
std::ifstream fs("logo.png", std::ios::binary);
std::vector<uint8_t> stdData((std::istreambuf_iterator<char>(fs)),
std::istreambuf_iterator<char>());
fs.close();
Vector<uint8_t> imageData(reinterpret_cast<const uint8_t*>(stdData.data()),
static_cast<int32_t>(stdData.size()));
int picIndex = worksheet.GetPictures().Add(5, 2, imageData);
Picture picture = worksheet.GetPictures().Get(picIndex);
picture.SetUpperLeftRow(5);
picture.SetUpperLeftColumn(2);
picture.SetLowerRightRow(6);
picture.SetLowerRightColumn(3);
picture.SetPlacement(PlacementType::MoveAndSize);
workbook.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
Aspose.Cells также предоставляет более простой механизм для изображений, привязанных к ячейкам: свойство Cell.EmbeddedImage. Присвоение байтов изображения этому свойству прикрепляет изображение к самой ячейке, как если бы оно было встроенным содержимым.
Cell.EmbeddedImage наиболее кратким вариантом, когда ваша цель — просто «изображение, которое находится внутри этой ячейки».Workbook (или откройте существующий).Worksheet из workbook.GetWorksheets().Get(0].Vector<uint8_t>.worksheet.GetCells().Get("C6")], либо worksheet.GetCells().Get(5, 2)].EmbeddedImage..xlsx.
Следующий код демонстрирует полный подход.#include "Aspose.Cells.h"
#include <vector>
#include <fstream>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook wb;
Worksheet worksheet = wb.GetWorksheets().Get(0);
Cell cell = worksheet.GetCells().Get(u"C6");
// Читаем файл изображения в массив байтов
std::ifstream file("logo.png", std::ios::binary);
std::vector<uint8_t> stdImageData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// Преобразуем std::vector в Aspose::Cells::Vector с помощью конструктора с указателем и размером
Vector<uint8_t> imageData(stdImageData.data(), (int32_t)stdImageData.size());
// Встраиваем изображение непосредственно в ячейку
cell.SetEmbeddedImage(imageData);
// При необходимости настраиваем высоту строки и ширину столбца, чтобы встроенное изображение было лучше видно
worksheet.GetCells().SetColumnWidth(2, 30); // Столбец C (индекс 2)
worksheet.GetCells().SetRowHeight(5, 100); // Строка 6 (индекс 5)
// Сохраняем полученную рабочую книгу как файл .xlsx
wb.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
Оба подхода создают рисунок, который помещается в одной ячейке, но они отличаются тем, как рисунок хранится и как он ведёт себя:
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.