Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Камера Excel — это объект рабочего листа, который отображает живое изображение диапазона ячеек и располагается на слое рисунков как обычное изображение. Aspose.Cells поддерживает два режима создания: динамическое изображение, которое автоматически обновляется при изменении исходных данных, и статическое изображение, которое захватывает однократный снимок диапазона. В этой статье рассматриваются оба подхода, чтобы вы могли выбрать тот, который подходит для вашего макета.
Камера Excel по сути является объектом изображения, привязанным к определённой строке и столбцу на слое рисунков рабочего листа. В отличие от обычного вставленного изображения, камера связана с исходным диапазоном через формулу в стиле A1, например "A1:F10". При изменении любой ячейки внутри этого диапазона изображение камеры автоматически обновляется, отражая новое содержимое. Камера сохраняет полное форматирование исходной области — границы, цвета фона, шрифты и числовые форматы — так что всё, что видно внутри ячеек, появляется также в изображении камеры. Это делает камеру особенно полезной для информационных панелей, сводок, боковых панелей и макетов отчётов, где требуется видимый предварительный просмотр удалённой области без прокрутки или повторения данных. Есть два важных замечания: необходимо вызвать updateSelectedValue() перед сохранением рабочей книги, и файл будет экспортирован в HTML или PDF, поскольку эти форматы полагаются на встроенные данные изображения, а не на живой пересчёт.
Динамическая камера — наиболее распространённый подход, который наиболее точно соответствует встроенному инструменту «Камера» в Excel. Он работает путём добавления изображения без начального содержимого, а затем присвоения ему Formula, ссылающейся на исходный диапазон. После присвоения формулы вызов updateSelectedValue() обновляет встроенные данные изображения, чтобы они были синхронизированы с отражаемыми ячейками. Камера реализуется не через выделенный класс — она построена целиком на стандартном типе Picture.
Ключевые API:
PictureCollection.add(int upperLeftRow, int upperLeftColumn, InputStream stream) — добавляет изображение, привязанное к указанной строке и столбцу. Передача null в параметр stream создаёт пустое изображение, выступающее в качестве заполнителя для динамической камеры. Метод возвращает индекс нового изображения.worksheet.getPictures().get(index) — индексированный доступ для получения конкретного Picture из коллекции.Picture.setFormula(String value) — задаёт ссылку в стиле A1 на исходный диапазон, который отражает камера, например "A1:F10".Picture.updateSelectedValue() — метод без возвращаемого значения, который обновляет встроенные данные изображения на основе ячеек, на которые ссылается Formula.updateSelectedValue() ДОЛЖЕН быть вызван перед сохранением, когда выходной формат — HTML или PDF; в противном случае экспортированный файл не будет содержать данные изображения, и камера будет отображаться пустой в отрендеренном выводе.
Следующий код создаёт рабочую книгу, добавляет пустое изображение, привязанное к строке 10 столбцу 6, связывает его с исходным диапазоном A1:F10 через setFormula, обновляет встроенные данные изображения и сохраняет рабочую книгу.
import java.io.InputStream;
import com.aspose.cells.PictureCollection;
import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.setName("CameraDemo");
// Динамическая камера: добавить пустое изображение, связать его через формулу с A1:F10, затем обновить
PictureCollection pictures = worksheet.getPictures();
int index = pictures.add(10, 6, (InputStream) null);
pictures.get(index).setFormula("A1:F10");
pictures.get(index).updateSelectedValue();
workbook.save("output_dynamic.xlsx", SaveFormat.XLSX);
Статическая камера по сути является однократно отрендеренным предварительным просмотром диапазона ячеек. Вместо поддержания живой связи вы однократно рендерите диапазон в байты изображения, оборачиваете эти байты в ByteArrayInputStream и добавляете их как обычное изображение. Содержимое изображения фиксируется в момент создания и не обновляется автоматически при изменении исходных ячеек.
Ключевые API:
Cells.createRange(String address) — создаёт объект Range из адреса в стиле A1, например "A1:F10".Range.toImage(ImageOrPrintOptions options) — рендерит диапазон в байты изображения. Передача null использует параметры рендеринга по умолчанию; существуют перегрузки для более тонкого управления выводом.new ByteArrayInputStream(byte[] buffer) — оборачивает байты отрендеренного изображения в ByteArrayInputStream, который может быть передан в PictureCollection.add.PictureCollection.add(int upperLeftRow, int upperLeftColumn, InputStream stream) — добавляет изображение, привязанное к указанной строке и столбцу, в этот раз передавая ByteArrayInputStream, полученный при рендеринге.
Следующий код создаёт рабочую книгу, строит Range для A1:F10, рендерит его в байты изображения через Range.toImage(null), оборачивает байты в ByteArrayInputStream, добавляет изображение, привязанное к строке 10 столбцу 6, и сохраняет рабочую книгу.import java.io.ByteArrayInputStream;
import com.aspose.cells.PictureCollection;
import com.aspose.cells.Range;
import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.setName("CameraDemo");
// Static Camera: build Range, render to bytes, wrap in ByteArrayInputStream, add as picture
Range range = worksheet.getCells().createRange("A1:F10");
PictureCollection pictures = worksheet.getPictures();
pictures.add(10, 6, new ByteArrayInputStream(range.toImage(null)));
workbook.save("output_static.xlsx", SaveFormat.XLSX);
updateSelectedValue() и сохраняет поведение живой связи на протяжении всего срока жизни файла.Picture.Formula и updateSelectedValue(), так и статическую, однократную камеру, построенную на Range.toImage и ByteArrayInputStream. Выбирайте динамический подход, когда ваш вывод должен оставаться синхронизированным с исходными ячейками, и выбирайте статический подход, когда вам нужен только фиксированный визуальный снимок во время сборки.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.