Небольшое вступление. На сегодняшний день мне представляется более предпочтительным формат xls из-за совместимости со старыми версиями Ms Excel, которые используются у многих клиентов. Да и скорость работы xls чувствительно выше. Но есть общая тенденция движется в сторону использования формата xlsx. В основном, из-за его относительной простоты организации и доступности. Xlsx формат представляет собой zip архив, в котором собран набор xml файлов, файлов графики и т.п. Обработку этих xml файлов вполне по силам написать программисту со средним уровнем квалификации. Аналогичный формат ods, используемый в опен офисах, хотя и базируется на том же стандарте, что xlsx, представляется более сложным. Открытый стандарт, используемый в xlsx, довольно обширен. Это имеют ввиду, когда говорят об общей его сложности. Нам, конечно, нужен некий базовый функционал, позволяющий быстро решать текущие задачи.
Мы почти месяц обсуждали возможности прямого создания xlsx файлов. В соседней теме был предложен враппер к стороннему классу, написанному на языке си. Мне этот подход не очень нравится по ряду причин. А учитывая важность интеграции учетных систем с офисными пакетами, был выбран путь разработки нативного класса на кларионе, который можно органично включить в свой фреймворк.
Для того, чтобы работа была максимально эффективной, кроме самой возможности создания xlsx файла нужна визуализация процесса. В итоге хочется иметь примерно такой код:
Код: Выделить всё
test_r routine !тестирование
locXLSX.init(clip(FsFilePathNoSlash(FsAccess:ActiveUserDir)) & '\1.xlsx',FsAccess:ActiveUserDir)
locXLSX.LoadTemplate(Loc:FileName)
locXLSX.OutSection('secHeader')
clear(Tov:record,-1)
set(Tov:keyName,Tov:keyName)
loop
next(Tovar)
if error()
break
.
locXLSX.OutSection('secDetail')
.
locXLSX.Make
locXLSX.kill(1)
Далее схема такая. Создаем бланк в виде xlsx файла и транслируем его в простой промежуточный формат. У меня такие файлы промежуточного формата имеют расширение xlfx. Зачем нужен промежуточный формат? Чтобы в процессе формирования отчетов у пользователей не заниматься распаковкой и парсингом xml файлов. Промежуточный формат похож на json, легко и быстро обрабатывается через стандартный ascii драйвер. Шаблон в xlsx выглядит следующим образом:
В ячейках используются специальные конструкции "форм=", "пер=". Следующие за этими ключевыми словами выражения могут содержать имена полей базы данных, стандартные функции или специально созданные переменные. Кларионовский кодогенератор автоматически биндит поля базы данных и стандартные функции, поэтому специально по ним делать ничего не надо. Можно также через bind подключать и свои функции. Аналогично можно организовать вставку изображений, графиков и т.п.
Далее нам надо привязать фрагменты шаблона к секциям, используемым программой для построения отчета. А также задать заголовки для отображения в дереве форм. Это организуем через пользовательские свойства xlsx файла. Они задаются в меню Файл - Свойства - Свойства пользователя.
В примере заданы 2 секции secHeader и secDetail. В значениях для них указываются номер листа, строка и колонка стартовой ячейки, количество строк и количество колонок в секции.
Продолжение переношу на следующий пост.