Использование LightCells API

Архитектура, управляемая событиями

Aspose.Cells предоставляет LightCells API, в основном предназначенные для манипулирования данными ячеек один за другим без создания в памяти полного блока модели данных (с использованием коллекции Cell и т. д.). Работает в событийно-ориентированном режиме.

Чтобы сохранить рабочие книги, предоставьте содержимое ячейки ячейка за ячейкой при сохранении, и компонент сохранит его непосредственно в выходной файл.

При чтении файлов шаблонов компонент анализирует каждую ячейку и выдает их значения одну за другой.

В обеих процедурах обрабатывается и затем отбрасывается один объект Cell, объект Workbook не содержит коллекции. Таким образом, в этом режиме экономится память при импорте и экспорте Microsoft файла Excel с большим набором данных, который в противном случае потребовал бы много памяти.

Несмотря на то, что LightCells API одинаково обрабатывает ячейки для файлов XLSX и XLS (на самом деле он не загружает все ячейки в память, а обрабатывает одну ячейку, а затем отбрасывает ее), он экономит память более эффективно для файлов XLSX, чем для файлов XLS из-за различные модели данных и структуры двух форматов.

Однако,для файлов XLS , чтобы сэкономить больше памяти, разработчики могут указать временное место для сохранения временных данных, созданных в процессе сохранения. Обычно,использование LightCells API для сохранения файла XLSX может сэкономить 50% или более памяти чем обычным путем,сохранение XLS может сэкономить около 20-40% памяти.

Запись больших файлов Excel

Aspose.Cells предоставляет интерфейс LightCellsDataProvider, который необходимо реализовать в вашей программе. Интерфейс представляет собой поставщика данных для сохранения больших файлов электронных таблиц в облегченном режиме.

При сохранении книги в этом режиме startSheet(int) проверяется при сохранении каждого листа в книге. Для одного листа, если startSheet(int) имеет значение true, то все данные и свойства строк и ячеек этого листа для сохранения предоставляются этой реализацией. Во-первых, nextRow() вызывается для сохранения индекса следующей строки. Если возвращается допустимый индекс строки (индекс строки должен быть в порядке возрастания, чтобы строки были сохранены), то объект Row, представляющий эту строку, предоставляется для реализации, чтобы установить его свойства с помощью startRow(Row).

Для одной строки сначала проверяется nextCell(). Если возвращается допустимый индекс столбца (индекс столбца должен быть в порядке возрастания для сохранения всех ячеек одной строки), то объект Cell, представляющий эту ячейку, предоставляется для установки данных и свойств с помощью startCell(Cell). После того, как данные этой ячейки установлены, эта ячейка сохраняется непосредственно в сгенерированном файле электронной таблицы, а следующая ячейка будет проверена и обработана.

В следующем примере показано, как работает LightCells API.

Следующая программа создает огромный файл со 100 000 записей на листе, заполненном данными. Мы добавили некоторые гиперссылки, строковые значения, числовые значения, а также формулы в определенные ячейки на листе. Кроме того, мы также отформатировали ряд ячеек.

Чтение больших файлов Excel

Aspose.Cells предоставляет интерфейс LightCellsDataHandler, который необходимо реализовать в вашей программе. Интерфейс представляет собой поставщик данных для чтения больших файлов электронных таблиц в облегченном режиме.

При чтении рабочей книги в этом режиме startSheet() проверяется при чтении каждого рабочего листа в рабочей книге. Для листа, если startSheet() возвращает true, то все данные и свойства ячеек в строках и столбцах листа проверяются и обрабатываются. Для каждой строки вызывается startRow(), чтобы проверить, нужно ли ее обрабатывать. Если строку необходимо обработать, сначала считываются свойства строки, и разработчики могут получить доступ к ее свойствам с помощью processRow().

Если ячейки строки также необходимо обработать, то processRow() возвращает true, а startCell() вызывается для каждой существующей ячейки в строке, чтобы проверить, нужно ли ее обрабатывать. Если да, то вызывается processCell().

Следующий пример кода иллюстрирует этот процесс. Программа читает большой файл с миллионами записей. На чтение каждого листа рабочей тетради уходит немного времени. Пример кода считывает файл и извлекает общее количество ячеек, количество строк и количество формул для каждого рабочего листа.

Класс, реализующий интерфейс LightCellsDataHandler.