Библиотека A4 для C и C++
Три ядра — A4 Таблица, A4 Документ и A4 Презентация — в виде обычных нативных библиотек: .so для Linux, .dylib для macOS, .dll для Windows. Подключаются из C и C++ и из любого языка, который умеет вызывать функции C: Go, Rust, Swift, Delphi, 1С через внешнюю компоненту. Файлы обрабатываются внутри вашей программы и не покидают компьютер.
Что умеет
- книги
.xlsxи.xlsm: открыть, записать число, текст или формулу, пересчитать, прочитать значения, сохранить; проект VBA сохраняется без изменений; - документы
.docx: открыть, прочитать и изменить текст, сохранить; - презентации
.pptx: открыть, изменить надписи, добавить слайд, сохранить; - те же ядра, что в пакетах для Python, Node.js, .NET и Java — результат одинаковый на всех языках.
Как устроено
У каждого ядра восемь функций с одной и той же схемой: байты файла → сессия → запросы в JSON → байты файла. Приставка в имени функции говорит, какое это ядро:
| Ядро | Файлы | Приставка функций |
|---|---|---|
| A4 Таблица | .xlsx, .xlsm | f1_ |
| A4 Документ | .docx | a4_ |
| A4 Презентация | .pptx | p2_ |
f1_session_open(data, len, name, n) /* открыть файл из памяти */
f1_session_handshake(session) /* что умеет ядро, версия */
f1_session_execute_json(session, j) /* команда: записать, пересчитать ... */
f1_session_save(session) /* байты сохранённого файла */
f1_last_error() /* текст последней ошибки */
f1_buffer_free(buffer) /* вернуть память, выданную ядром */
f1_session_free(session) /* закрыть сессию */
f1_session_new() /* пустая книга */
Для документов и презентаций — те же функции с приставками a4_ и p2_. Каждый буфер, который вернула библиотека, нужно отдать обратно в *_buffer_free; буферы не заканчиваются нулём — длина приходит вместе с данными.
Пример: изменить ячейку и пересчитать
#include "a4office.h"
F1Session *s = f1_session_open(data, len, (const uint8_t *)"budget.xlsx", 11);
/* рукопожатие называет книгу (subsetId) и активный лист (activeSheet.path) */
F1Buffer hello = f1_session_handshake(s);
/* ... достать subsetId и путь листа из JSON ... */
f1_buffer_free(hello);
/* A3 = «Итого», B3 = =B1*B2; строки и столбцы считаются от нуля */
const char *req =
"{\"operation\":\"apply_cell_edits\",\"subsetId\":\"…\",\"edits\":["
"{\"inputKind\":\"text\",\"sheetKey\":\"…\",\"row\":2,\"col\":0,\"input\":\"Итого\"},"
"{\"inputKind\":\"formula\",\"sheetKey\":\"…\",\"row\":2,\"col\":1,\"input\":\"=B1*B2\"}],"
"\"viewport\":{\"top\":2,\"left\":1,\"rows\":1,\"cols\":1}}";
F1Buffer r = f1_session_execute_json(s, (const uint8_t *)req, strlen(req));
/* ответ: {"ok":true,"payload":...} с пересчитанным значением B3 */
f1_buffer_free(r);
F1Buffer out = f1_session_save(s); /* байты сохранённой книги */
write_file("budget-edited.xlsx", out.data, out.len);
f1_buffer_free(out);
f1_session_free(s);
Полный рабочий пример для всех трёх ядер — open_save.c с Makefile, CMakeLists.txt и образцами файлов — лежит в каждом архиве в папке examples/c. Он открывает книгу, документ или презентацию, вносит правку и сохраняет результат.
Сборка
# Linux и macOS
cc open_save.c -I a4-c/include -L a4-c/lib -lf1 -la4 -lp2 -Wl,-rpath,a4-c/lib -o open_save
# или через pkg-config
cc open_save.c $(pkg-config --cflags --libs a4-c/pkgconfig/a4office.pc) -o open_save
Windows: MSVC — ссылка на .lib из папки lib, MinGW — на .dll.a; библиотеки .dll кладутся рядом с программой.
Платформы: Linux x86-64 и aarch64 (glibc 2.28 и новее), macOS 11 и новее (Apple silicon и Intel), Windows x64.
Что бесплатно
| Без ключа | С ключом разработчика | |
|---|---|---|
| Документов в сутки | 30 | 10 000 |
| Срок | без срока | 90 дней с выдачи |
Квоту платят открытие и сохранение файла в любом из трёх ядер — так же, как в пакете для Python. Ключ задаётся переменной A4OFFICE_LICENSE или файлом из A4OFFICE_LICENSE_FILE; где вести счёт — A4OFFICE_STATE_DIR; язык сообщений — A4OFFICE_LANGUAGE (для русских сообщений задайте ru). Ключ разработчика — по запросу на partner@a4-office.ru.
Чего нет
- макросы VBA не исполняются — только сохраняются;
- преобразования в PDF и картинок страниц в этом выпуске нет;
- шрифты в библиотеку не встроены: ядро A4 берёт системные.
Когда документы нужно показать людям
Библиотека создаёт и меняет файлы внутри вашей программы. Показать их людям и дать править — задача Сервера A4 (редакторы в браузере), настольных редакторов A4 Документ, A4 Таблица и A4 Презентация и мобильного SDK для партнёров.
Скачать
| Файл | Размер | Платформа |
|---|---|---|
a4-c-2026.4.5-linux-x64.tar.gz | 48 022 793 байт | Linux x86-64 (glibc 2.28+) |
a4-c-2026.4.5-linux-arm64.tar.gz | 44 273 080 байт | Linux aarch64 (glibc 2.28+) |
a4-c-2026.4.5-macos-arm64.tar.gz | 42 364 633 байт | macOS 11+, Apple silicon |
a4-c-2026.4.5-macos-x64.tar.gz | 46 652 852 байт | macOS 11+, Intel |
a4-c-2026.4.5-windows-x64.zip | 48 079 626 байт | Windows x64 (MSVC и MinGW) |
SHA256SUMS | 488 байт | контрольные суммы архивов |
В каждом архиве: заголовки (include/), три библиотеки (lib/), файл pkg-config, пример с образцами (examples/c), описание по-русски и контрольные суммы всех файлов.
Контрольные суммы
84a1071e3f515ac5d1d7ac308a9e393643f9b99bea771d9a0ae40ff7c2d0be04 a4-c-2026.4.5-linux-arm64.tar.gz
28fe68c95c069f6b22c06a783d1cc071b4bf3fd7b9e14ccd9c761c5ca88aab55 a4-c-2026.4.5-linux-x64.tar.gz
0d12e77dea5b6cbb1ffa9c2a8b99764d126c1ef58c903b7d7bc82763e0730d83 a4-c-2026.4.5-macos-arm64.tar.gz
01754ab393277e4a96e425b184d2732f2ad1acc3348d3181cbc8661df39902e4 a4-c-2026.4.5-macos-x64.tar.gz
8bd6dd356834021a6a75946703186c610efa97d2f08061e33040607649c5ebdd a4-c-2026.4.5-windows-x64.zip
Проверка после скачивания:
shasum -a 256 -c SHA256SUMS