Страница 28 из 62

libxlsxwriter for Clarion

Добавлено: 12 Февраль 2017, 14:06
RaFaeL
Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое

libxlsxwriter for Clarion

Добавлено: 03 Февраль 2018, 20:27
RaFaeL
Игорь Столяров писал(а): 03 Февраль 2018, 20:11Ой ! Мне тут GitHub/John McNamara бросил пост: There is now a fix for this on the master branch !
Это значит, что группировка строк добавлена !?

В описании на сайте ничего нет ... А что такое "master branch" ? Может какой-то раздел для бета-тестирования ?
Да, фикс есть какой-то. Только это не про группировки, это про нулевые отступы в колонтитулах.
https://github.com/jmcnamara/libxlsxwri ... 7ad5f21867
Ну тоже дело.
Сейчас попробую скачать и пересобрать

libxlsxwriter for Clarion

Добавлено: 03 Февраль 2018, 20:29
Игорь Столяров
RaFaeL писал(а): 03 Февраль 2018, 20:27Только это не про группировки
В примерах появилось !

Код: Выделить всё

    if (user_options) {
        hidden = user_options->hidden;
        level = user_options->level;
        collapsed = user_options->collapsed;
    }

libxlsxwriter for Clarion

Добавлено: 03 Февраль 2018, 20:36
RaFaeL
Это и раньше было, там в XML ничего не пишется. Пока нет такого фикса.
https://github.com/jmcnamara/libxlsxwri ... master/src тут можно отслеживать

libxlsxwriter for Clarion

Добавлено: 03 Февраль 2018, 21:59
RaFaeL
Обновил шапку
Исправлено: невозможно было установить нулевой отступ в колонтитулах

libxlsxwriter for Clarion

Добавлено: 03 Февраль 2018, 22:47
Игорь Столяров
finsoftrz писал(а): 03 Февраль 2018, 14:04алгоритм точного перевода единиц измерения экранного контрола в экселевские
Я внёс мелкие исправления в свой пример расчёта ширины колонки, и хочу сказать, что в Microsoft Excel попадание практически 100% по кол-ву строк. Пробовал на очень разных текстах, размерах и видах шрифтов. Работает чётко и предсказуемо.

А вот с Apache Calc - беда. Точнее дурдом. Во-первых, очень сильно выбешивает перевод и округление в метрические ед. измерения.
Во вторых, одиночная строка почему-то может быть от 0.37 до 0.42 см. (8 размер шрифта) в зависимости от контекста.
Далее, даже визуально видно, что межстрочный интервал меньше чем в Microsoft Excel и как следствие строка больше текста.
Подозреваю, что Ваш 0.75 вот здесь и появляется ... ;)

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 10:21
Игорь Столяров
Есть предложение сделать возможность пользовательских расширений в библиотеке XLSXWriter.

1. Добавить в комплект файл xlsxuser.clw с пустыми секциями.

Код: Выделить всё

    ! --- для xlsxequates.inc
    Section('_XLSX_UserDefineConstant_')  
    
    ! --- для xlsxwriter.inc
    Section('_XLSX_UserDefineData_') 
    Section('_XLSX_UserClassData_')
    Section('_XLSX_UserClassMetod_')
    
    ! --- для xlsxwriter.clw
    Section('_XLSX_UserMetod_') 
    ...
2. В файлах xlsxequates.inc, xlsxwriter.inc, xlsxwriter.clw в нужных местах сделать соответствующие вставки:

Код: Выделить всё

    Include('xlsxuser.clw','_XLSX_UserDefineConstant_')
    ...
    Include('xlsxuser.clw','_XLSX_UserDefineData_')
    и т.д.
В общем-то и всё. Теперь можно будет в xlsxuser.clw добавить и переобъявить константы, ввести свои методы и т.д.

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

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

Спасибо за рассмотрение ! :)

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 10:27
RaFaeL
Неправильный подход, должно быть наоборот - у вас свой класс по обработке данных, в нем ссылка на xlsxwriter, соответственно работаете вашкласс.расчетвысотыстроки вашкласс.xlsx.writestring

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 10:40
Игорь Столяров
С объявлением своего класса на основании родительского - понятно ! :)

Но это очень громозко и неудобно ... :( Мне в каждом приложении (DLL) нужно будет переобъявлять класс,
вводить константы и данные (не входящие в класс) и т.д. Путаница жуткая уже сейчас. :(
Уже и так есть имена тех же рамок из 3-х имён.

Одно другому - не мешает.
Можно объявлять класс на основании родительского, можно модифицировать через секции.
Кому как удобно ... ;)

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 10:58
RaFaeL
Нет, не на основании родительского. Просто ваш класс, в нем ссылки на внешние классы
Кусок нашего монстра по экспорту всего во всё:

Код: Выделить всё

ReportMaker             CLASS,TYPE,MODULE('bngrep.clw'),LINK('bngrep',_ABCLinkMode_),DLL(_ABCDllMode_)
RMGlobal                   &ReportMakerGlobal
FC                         &BNGFormatClass
CR                         &BNGCreateRepClass
CQ                         &CtrlQueueType
VARQueue                   &VARQueueType
PreviewQueue               &PreviewQueueType
INIMgr                     &INIClass
ER                         &BNGExportRepClass
EC                         &RMEValuateClass
AttachQueue                &RMAttachMailQueueType
EAccountQueue              &EAccountQueueType
...
ExcelString                CSTRING(8000)
OleObject                  LONG
MyExcel             &MSExcelClass
MyWord              &MSWordClass
MyNativeExcel       &TWorkbook
MyXlsx              &xlsxwriter
MyReport            &REPORT

WMFG                GROUP(WMFExportOptions),PRE(WMF)
                    END
RTFG                GROUP(RTFExportOptions),PRE(RTF)
                    END
HTMLG               GROUP(HTMLExportOptions),PRE(HTML)
                    END
PDFG                GROUP(PDFExportOptions),PRE(PDF)
                    END
PNGG                GROUP(WMFExportOptions),PRE(PNG)
                    END
...
ExcelFormat         BYTE
ExcelFileName       CSTRING(256)
RunExcel            BYTE
...

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 11:13
Игорь Столяров
Буду пробовать ... Тогда нужно переделывать весь свой код и вводить определения вроде:

Код: Выделить всё

   Loc:ReportMaker.MyXLSX.Format.Top.Format = XLSX:BORDER_DASHED
Жесть. :(

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 11:32
Дед Пахом
Игорь Столяров писал(а): 04 Февраль 2018, 10:40Мне в каждом приложении (DLL) нужно будет переобъявлять класс
На кой ляд класс в приложении объявлять? include('myxlsx.inc')

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 11:37
finsoftrz
На мой вкус как раз проще всего наследовать. Это правильно с точки зрения ООП. Заодно будет повод потренить в текстовом редакторе в Clarion10... :-)

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 13:14
Игорь Столяров
Понял ! И проникся глубиной вопроса. :)

1. Я пока ручками, при обновлении библиотеки, лучше вставлю 3 строчки кода, чем буду постоянно при работе травмировать
себе мозг 5-ти этажными конструкциями и переделывать сейчас полностью весь код экспорта отчётов.
У меня всё простенько, нет универсальных методов генерации отчётов, и я не хочу без необходимости усложнять простое.

2. Согласен, если делать грамотно, нужно наследовать класс и т.д. Но это отдельная и интересная история, которая
опять-таки кроме отладки, приведёт к переписке кода и т.д. Потом. :)

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 13:49
finsoftrz
Время, только время и получаемый опыт позволяют нам все осмыслить и разложить по полочкам...

libxlsxwriter for Clarion

Добавлено: 04 Февраль 2018, 16:12
RaFaeL
Игорь Столяров писал(а): 04 Февраль 2018, 13:141. Я пока ручками, при обновлении библиотеки, лучше вставлю 3 строчки кода, чем буду постоянно при работе травмировать
себе мозг 5-ти этажными конструкциями и переделывать сейчас полностью весь код экспорта отчётов.
Мне кажется, лучше сразу сделать по уму и потом добавление нового типа экспорта будет делаться именно в три строчки. Хотя дело ваше. Но в библиотеку никаких вставок точно не буду добавлять