Глибоке занурення: розширені шаблони з Aspose.Cells Cloud Management API
Ви знаєте, як створити робочу книгу, перейменувати лист і стиснути файл. Але
ManagementControllerмає більш гострі інструменти, заховані на виду — повний структурний дамп JSON робочої книги, перевірку об’єднаних клітинок, прийняття ревізій та шаблонний патерн створення, який перетворює стилізацію в однорядкову задачу. Це те місце, де організація роботи перестає бути “клікання по Excel” і стає програмна гігієна робочих книг.
У Частина 1 ми розглянули 15 кінцевих точок з чіткими покроковими інструкціями. Цей пост присвячений ситуаціям, які дійсно створюють проблеми у продакшн:
- Вам потрібно аудитувати робочий лист перед його обробкою — чи містить він зведені таблиці, діаграми, об’єднані ділянки, які можуть зламати ваш код?
- Вам потрібно приймати відстежувані зміни у сотнях файлів, перш ніж вони потраплять у ваш архівний конвеєр.
- Ви хочете створити систему шаблонізації, де різні орендарі отримують різні брендові результати без написання коду стилізації.
- Вам потрібно перевіряти області об’єднаних клітинок, щоб уникнути запису даних у них (або щоб зрозуміти розташування робочого листа, який ви не створювали).
- Ви хочете об’єднати створення → структурування → модифікацію → стиснення в один фабричний робочий лист.
Кожен приклад нижче можна виконати. Код у cURL; ті ж виклики 1:1 відповідають .NET, Python та Java SDK.
1. Отримання повної структури робочої книги у форматі JSON
PUT /v4.0/cells/spreadsheet/structure (local) and GET /v4.0/cells/{name}/structure (remote) повертає один JSON‑документ, який описує все, що движок знає про робочу книгу: листи, таблиці, зведені таблиці, діаграми, форми, області об’єднаних клітинок та інше.
Локальний
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/structure" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: multipart/form-data" \
-F "file=@mystery_workbook.xlsx"
Віддалений
curl -X GET "https://api.aspose.cloud/v4.0/cells/mystery_workbook.xlsx/structure?folder=uploads" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Що ви отримуєте назад
{
"FileName": "mystery_workbook.xlsx",
"FileFormat": "Xlsx",
"Worksheets": [
{
"Name": "Sheet1",
"Type": "Worksheet",
"Tables": [{ "Name": "SalesData", "Range": "A1:D120" }],
"PivotTables": [{ "Name": "Pivot1", "Range": "F1:H20" }],
"Charts": [{ "Name": "Chart1", "Type": "Column" }],
"MergedCells": [
{ "StartRow": 0, "StartColumn": 0, "EndRow": 0, "EndColumn": 3 }
]
}
]
}
Чому це важливо
- Попередня перевірка. Перед запуском імпортів
DataProcessingControllerу робочій книзі, викличтеstructure, щоб перевірити, чи існує цільовий лист і таблиця. - Виявлення макету. Працюєте з робочою книгою, яку ви не створювали?
structureточно повідомляє, що всередині, без необхідності завантажувати її та копатися в Excel. - Відображення інтерфейсу користувача. Керуйте вибором листа / таблиці / діаграми у вашому додатку безпосередньо з відповіді
structure.
2. Перевірка областей злитих клітинок
Об’єднані клітинки — це тихі вбивці автоматизації електронних таблиць — запис у об’єднану область може тихо перезаписати всю ділянку або викликати незрозумілі помилки. ManagementController надає два кінцеві точки для їх запиту.
Локальний лист
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/mergedcells?worksheet=Sheet1" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@my_workbook.xlsx"
Віддалений лист
curl -X GET "https://api.aspose.cloud/v4.0/cells/my_workbook.xlsx/worksheets/Sheet1/mergedcells?folder=uploads" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Відповідь
[
{ "StartRow": 0, "StartColumn": 0, "EndRow": 0, "EndColumn": 3 },
{ "StartRow": 5, "StartColumn": 1, "EndRow": 7, "EndColumn": 1 }
]
Кожен запис — це CellArea — прямокутник у координатах рядка/стовпця. Перший регіон вище — це заголовок, об’єднаний через A1–D1; другий — вертикальне об’єднання в B6–B8.
Використовуйте це, щоб уникнути мін
Перш ніж записувати дані у робочий лист (через CellsController або DataProcessingController’s import), викличте цей endpoint і відфільтруйте будь-які значення startcell, які знаходяться всередині злитої області. Або, навпаки, використайте злиті області для виявлення заголовкових рядків та назв розділів програмно.
3. Прийняття відстежуваних змін (ревізій)
Коли співробітники вмикають “Track Changes” в Excel, кожне редагування стає revision — очікуваною зміною з автором, міткою часу та станом прийняти/відхилити. Якщо ваш конвеєр обробляє такі файли і потребує чистих, фіналізованих версій, у вас є два варіанти:
- Локальний:
PUT /v4.0/cells/spreadsheet/accept-all-revisions - Віддалений:
PUT /v4.0/cells/{name}/accept-all-revisions
Локальний
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/accept-all-revisions" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@collaborative_draft.xlsx" \
--output finalized.xlsx
Віддалений
curl -X PUT "https://api.aspose.cloud/v4.0/cells/collaborative_draft.xlsx/accept-all-revisions?folder=drafts" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--output finalized.xlsx
Після цього виклику документ більше не показує позначки відстежуваних змін. Усі правки вбудовуються, ніби їх було введено безпосередньо у фінальну версію.
Масовий робочий процес
Об’єднайте з API переліку файлів вашого провайдера сховища, щоб обробляти кожен файл у папці:
for name in $(list_files_in drafts/); do
curl -X PUT "https://api.aspose.cloud/v4.0/cells/$name/accept-all-revisions?folder=drafts" \
-H "Authorization: Bearer $TOKEN"
done
(Реальний продукційний код використовував би SDK і паралелізував би з async/await — виклик REST ідентичний.)
4. Створення за шаблоном у великому масштабі
Параметр template у spreadsheet/create — це більше, ніж зручність — це основа системи шаблонізації. Сервер завантажує шаблонну книгу, копіює її тему, стилі, іменовані діапазони та будь‑які попередньо форматовані таблиці, і повертає нову книгу, яку ви можете одразу заповнити даними через DataProcessingController/import/data.
Шаблон: один шаблон на орендаря
Зберігайте шаблони у хмарному сховищі за шляхом, що відповідає ключу орендаря:
templates/tenant_acme/invoice.xlsx
templates/tenant_globex/invoice.xlsx
templates/tenant_initech/invoice.xlsx
Коли система орендаря генерує рахунок:
# 1) Create from tenant template
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/create\
?format=xlsx\
&template=templates/tenant_acme/invoice.xlsx" \
-H "Authorization: Bearer $TOKEN" \
--output blank_acme.xlsx
# 2) Hydrate with this invoice's line items
curl -X PUT "https://api.aspose.cloud/v4.0/cells/import/data/json\
?worksheet=Items\
&startcell=A10\
&insert=true" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@blank_acme.xlsx" \
-F "file=@line_items.json" \
--output invoice_ACME_2026_09_001.xlsx
Кожен орендар отримує піксельно‑ідеальний результат у своєму бренді — нульова логіка стилізації у вашому коді.
Шаблон: фабрика звітів
Нічна задача повинна створювати 30 регіональних звітів, усі з однаковим макетом, але з різними даними:
for region in north south east west ...; do
create(template=regional_template.xlsx) |
import(data=region_$region.csv, worksheet=Data, startcell=A2) |
compress(level=6) |
save("reports/2026/09/$region.xlsx")
done
Кожен етап конвеєра — це один виклик API. Уся фабрика вміщується у цикл оболонки.
5. Стиснення з наміром
PUT /v4.0/cells/spreadsheet/compress?level=N приймає будь‑який рівень від 0 до 9. Вибір правильного рівня — це невелике рішення, яке має подальші наслідки.
| Level | Типовий випадок використання |
|---|---|
| 0 | Налагодження — вивести книгу без жодного стиснення |
| 1–3 | Практично реальні конвеєри, де вартість процесора важливіша за розмір |
| 4–6 | Рекомендація за замовчуванням. Хороше стиснення для помірного навантаження процесора. |
| 7–9 | Архівування, електронні вкладення, результати — розмір важливіший за швидкість |
Стискання рівня 6 для файлу XLSX розміром 30 MB зазвичай дає близько 8–12 MB. Рівень 9 часто стискає ще 10–15 % при приблизно вдвічі вищих витратах процесора. Для більшості застосунків level=6 — оптимальний варіант.
6. Відновлення: що воно насправді робить
PUT /v4.0/cells/spreadsheet/repair навмисно простий — без параметрів, без конфігурації. Під капотом він:
- Аналізує книгу за допомогою строгого читача движка.
- Відкидає структурно недійсні частини (осиротілі зв’язки, некоректний XML, недійсні посилання на клітинки).
- Повторно серіалізує у новий контейнер XLSX.
Результат — це файл, який відкривається без проблем у Excel. Що він не може виправити: пошкодження на рівні даних (комірка, значення якої #REF! через зламану формулу), втрачені зображення (якщо сам потік зображення пошкоджений), або втрачені VBA‑макроси (якщо vbaProject.bin не читається). Але для 80 % випадків — “Excel says this file is corrupted and offers to repair it” — цей кінцевий пункт виконує те саме відновлення на боці сервера, без графічного інтерфейсу.
Коли виконувати ремонт
- При завантаженні. Якщо ваш додаток приймає завантаження користувачів, запустіть
repairперед будь‑якою іншою обробкою. Це вимагає одного додаткового виклику, але запобігає каскадним помилкам пізніше в конвеєрі. - При помилках експорту. Якщо нижчестояще перетворення (
ConversionController) завершується з незрозумілою помилкою, спочатку запустітьrepair, а потім повторіть спробу перетворення.
7. Шаблони інтеграції
Шаблон: фабрика робочих книг
Об’єднайте всі можливості ManagementController в один фабричний кінцевий пункт у вашому застосунку:
POST /api/reports/{tenantId}
1. Create from template: templates/{tenantId}/report.xlsx
2. Import data into the "Data" sheet starting at A2
3. Rename "Sheet1" → "Cover"
4. Accept all revisions (in case template had tracked changes)
5. Compress level 6
6. Return final XLSX
Кожен крок — це один виклик API до ManagementController або DataProcessingController. Ваш кінцевий пункт — це тонкий оркестратор.
Шаблон: audit-before-process
Перед виконанням дорогих операцій на рівні клітинок:
[1] GET {name}/structure # understand what's inside
[2] GET {name}/worksheets/X/mergedcells # know where NOT to write
[3] DataProcessing/... # run the real work
Два виклики інспекції коштують майже нічого, але вони запобігають дорогим у налагодженні помилкам, які виникають при записі в об’єднані ділянки або при зверненні до неіснуючих таблиць.
8. Врахування продуктивності
structureнедорога. Вона обходить лише метадані, а не вміст клітинок. Безпечно викликати на великих робочих книгах.mergedcellsнедорога. Те ж саме.compressобмежена процесором. Вищі рівні коштують дорожче. Використовуйте рівень 6 за замовчуванням, якщо у вас немає підстав підвищувати його.repair— це повна повторна серіалізація. Дорожче, ніжcompress. Запускайте її під час завантаження, а не при кожному запиті.accept-all-revisionsмасштабується з кількістю ревізій. Сотні ревізій у одному файлі — це нормально; десятки тисяч займатимуть трохи часу.- Віддалені варіанти швидші за локальні запити. Коли файли вже знаходяться в хмарному сховищі,
GET {name}/structureдозволяє уникнути завантаження файлу на ваш комп’ютер лише для його перегляду.
9. Усунення поширених проблем
| Сiмптом | Причина | Виправлення |
|---|---|---|
400 on add/worksheet |
Ім’я листа вже існує або порожнє | Виберіть унікальне ім’я або дозвольте серверу автоматично його призначити |
400 on rename/worksheet |
sourceName не відповідає жодному існуючому листу |
Імена чутливі до регістру; спочатку викличте worksheets, щоб отримати їх список |
500 on compress with level=10 |
Рівень повинен бути від 0 до 9 | Використайте level=9 для максимальної компресії |
repair returns a file that still won’t open |
Пошкодження знаходиться у потоці image/VBA, а не у структурному XML | repair не може виправити пошкодження на рівні даних; попросіть користувача надати чистий експорт |
structure returns empty Worksheets array |
Завантажений файл зовсім не є дійсною робочою книгою | Перевірте розширення та вміст файлу; спочатку запустіть repair |
accept-all-revisions is a no-op |
У робочій книзі не ввімкнено відстеження | Це нормально — відсутність ревізій означає, що немає чого приймати |
mergedcells returns empty array |
У листі немає об’єднаних ділянок | Використовуйте цей сигнал, щоб безпечно записувати в будь‑яке місце |
10. Об’єднання всього разом
Конкретні кінцеві точки ManagementController невеликі. Їхня сила полягає у композиції:
- Створити книгу Excel з шаблону → імпортувати дані через
DataProcessingController→ перейменувати листи → стиснути → доставити. Це повний SaaS конвеєр звітності у п’яти HTTP викликах. - Структура + mergedcells + cells → шар інспекції, який розуміє будь‑яку книгу, яку ви передасте, без Excel.
- Відновлення при завантаженні → accept-all-revisions → решта вашого конвеєра завжди бачить лише чисті, фіналізовані книги.
Вам не потрібна серверна ферма. Вам не потрібно встановлювати Excel. Вам потрібен curl і план.