Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Excel Camera — это объект рабочего листа, который отображает живое изображение диапазона ячеек и располагается на слое рисунков как обычная картинка. Aspose.Cells поддерживает два режима создания: динамическое изображение, которое автоматически обновляется при изменении исходных данных, и статическое изображение, которое делает однократный снимок диапазона. В этой статье описаны оба подхода, чтобы вы могли выбрать тот, который подходит для вашего макета.
Excel Camera — это, по сути, объект изображения, привязанный к определённой строке и столбцу на слое рисунков рабочего листа. В отличие от обычной вставленной картинки, Camera связана с исходным диапазоном через формулу в стиле A1, например "A1:F10". При каждом изменении любой ячейки внутри этого диапазона изображение Camera автоматически обновляется, отражая новое содержимое. Camera сохраняет полное форматирование исходной области — границы, цвета фона, шрифты и числовые форматы — поэтому всё, что видно внутри ячеек, отображается и в изображении Camera. Это делает Camera особенно полезной для панелей мониторинга, сводок, боковых панелей и макетов отчётов, где нужен видимый предпросмотр удалённой области без прокрутки или повторения данных. Есть два важных замечания: необходимо вызвать UpdateSelectedValue() перед сохранением рабочей книги, и файл будет экспортирован в HTML или PDF, поскольку эти форматы полагаются на встроенные данные изображения, а не на живой пересчёт.
Динамическая Camera — наиболее распространённый подход и наиболее близко соответствует встроенному инструменту Camera в Excel. Она работает путём добавления изображения без начального содержимого, а затем присвоения ему Formula, ссылающегося на исходный диапазон. После присвоения формулы вызов UpdateSelectedValue() обновляет встроенные данные изображения, чтобы они были синхронизированы с ячейками, которые они отражают. Camera не реализована через выделенный класс — она полностью построена на стандартном типе Picture.
Основные API:
PictureCollection.Add(int upperLeftRow, int upperLeftColumn, Stream stream) — добавляет изображение, привязанное к заданной строке и столбцу. Передача null для параметра stream создаёт пустое изображение, которое выступает в качестве заполнительницы для динамической Camera. Метод возвращает индекс нового изображения.worksheet.Pictures[index] — индексатор для получения определённого Picture из коллекции.Picture.Formula — строковое свойство (get/set), содержащее ссылку в стиле A1 на исходный диапазон, который отражает Camera, например "A1:F10".Picture.UpdateSelectedValue() — метод без возвращаемого значения, который обновляет встроенные данные изображения из ячеек, на которые ссылается Formula.UpdateSelectedValue() ДОЛЖЕН быть вызван перед сохранением, когда выходной формат — HTML или PDF; иначе экспортированный файл не будет содержать данные изображения, и Camera будет отображаться пустой в отрендеренном выводе.
Следующий код создаёт рабочую книгу, добавляет пустое изображение, привязанное к строке 10 столбцу 6, связывает его с исходным диапазоном A1:F10 через свойство Formula, обновляет встроенные данные изображения и сохраняет рабочую книгу.
using System;
using System.IO;
using System.Drawing;
using Aspose.Cells;
using Aspose.Cells.Drawing;
var workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
worksheet.Name = "CameraDemo";
// Динамическая камера: добавляем пустое изображение, связываем его через формулу с A1:F10, затем обновляем
var pictures = worksheet.Pictures;
int index = pictures.Add(10, 6, (Stream)null);
pictures[0].Formula = "A1:F10";
pictures[0].UpdateSelectedValue();
workbook.Save("output_dynamic.xlsx", SaveFormat.Xlsx);
Статическая Camera — это, по сути, однократно отрендеренный предпросмотр диапазона ячеек. Вместо поддержания живой связи вы однократно рендерите диапазон в байты изображения, оборачиваете эти байты в MemoryStream и добавляете их как обычное изображение. Содержимое изображения фиксируется в момент создания и не обновляется автоматически при изменении исходных ячеек.
Основные API:
Cells.CreateRange(string address) — создаёт объект Range из адреса в стиле A1, например "A1:F10".Range.ToImage(ImageOrPrintOptions options) — рендерит диапазон в байты изображения. Передача null использует параметры рендеринга по умолчанию; существуют перегрузки для более тонкого управления выводом.new MemoryStream(byte[] buffer) — оборачивает отрендеренные байты изображения в MemoryStream, который можно передать в PictureCollection.Add.PictureCollection.Add(int upperLeftRow, int upperLeftColumn, Stream stream) — добавляет изображение, привязанное к заданной строке и столбцу, на этот раз передавая MemoryStream, созданный при рендеринге.
Следующий код создаёт рабочую книгу, создаёт Range для A1:F10, рендерит его в байты изображения через Range.ToImage(null), оборачивает байты в MemoryStream, добавляет изображение, привязанное к строке 10 столбцу 6, и сохраняет рабочую книгу.using System;
using System.IO;
using System.Drawing;
using Aspose.Cells;
using Aspose.Cells.Drawing;
var workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
worksheet.Name = "CameraDemo";
// Статичная камера: создать диапазон, преобразовать в байты, обернуть в MemoryStream, добавить как изображение
var range = workbook.Worksheets[0].Cells.CreateRange("A1:F10");
var pictures = worksheet.Pictures;
pictures.Add(10, 6, new MemoryStream(range.ToImage(null)));
workbook.Save("output_static.xlsx", SaveFormat.Xlsx);
UpdateSelectedValue() и сохраняет поведение живой связи на протяжении всего срока жизни файла.Picture.Formula плюс UpdateSelectedValue(), так и статическую, однократную Camera, построенную на Range.ToImage плюс MemoryStream. Выбирайте динамический подход, когда ваш вывод должен оставаться синхронизированным с исходными ячейками, и выбирайте статический подход, когда нужен только фиксированный визуальный снимок во время сборки.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.