libxlsxwriter for Clarion

Программы на Clarion, шаблоны, библиотеки и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Создание файлов Excel (xlsx) без использования Excel на основе проекта libxlsxwriter (https://libxlsxwriter.github.io). Можно создавать файлы, листы в них, писать данные (текст (в т.ч. русский), число, дата, время), ставить форматирование (цвет, рамки, шрифт, выравнивание, размер), объединять ячейки, фиксировать и скрывать строки и колонки, вставлять изображения, рисовать графики (диаграммы), устанавливать настройки печати и свойства документа.
Для конвертирования "картинок" форматов используется библиотека Tpicture от Taboga, у кого этого класса нет замените на что-то свое
Вложения
libxlsxwriter.zip
Версия 1.5 от 30.12.2021 на основе библиотеки 1.1.4
(276.26 КБ) 997 скачиваний
Последний раз редактировалось RaFaeL 30 Декабрь 2021, 19:19, всего редактировалось 40 раз.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Ну я там уже был )
Это одна из двух вещей, которые реализованы в основном проекте при экспорте по OLE и не реализованы в библиотеке xlsx
(вторая - редактирование опций отображения секторов (точек) круговой диаграммы, оно в библиотеке есть, но ппц как неудобно сделано для враппера. Неудобнее только проверка данных)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Да. Есть вещи сделанные, но реализация конечно могла бы быть и лучше ....
Например вставка картинок. Очень хорошо, базовый функционал и всё необходимое есть.
Но приходится хранить все картинки до момента записи отчёта .... :(

А если, например, это реестр товаров с образцами на 50 тонн записей ?
Ведь в момент вставки вся информация о картинке уже передана библиотеке, можно было
бы сделать процесс передачи картинок последовательным ....
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение Дед Пахом »

Игорь Столяров писал(а): 02 Февраль 2018, 7:04И сразу конкурент нарисовался со своим двухсотбаксовым интерфейсом на ClarionHUB
Я как бы в стороне от этого, не пользуюсь Excel'ем и библиотекой. А те, кто юзает "нашу" libxlsxwriter, могли бы и оставить отзыв на ClarionHub.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

finsoftrz писал(а): 02 Февраль 2018, 1:50Ну, почему тупиковый. Работает все.
Согласен. Идея Деда Пахома и здесь неплохо работает. :)
Но, наверно всё-таки полный satisfaction в этом вопросе невозможен в принципе, т.к. на кол-во строк ещё оказывает влияние наличие и тип рамки ячейки в таблице. Концепт метода для установки высоты строки под многострочный текст у меня получился следующий:

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


  Map
    XLSX_RowHeight(xlsxwriter,window,long,string,long,byte=15),long
  end

XLSX_RowHeight   PROCEDURE  (MyXLSX_,Window_,Row_,Str_,WidthPixels_,OneRowHeight_)
Loc:Control          USHORT
Loc:LineCount      LONG
  CODE
  Window_{Prop:Pixels} = True
  Loc:Control = Create(0,Create:Text)
  If Loc:Control
     Loc:Control{Prop:FontName}    = Choose(MyXLSX_.Format.FontName <> '', MyXLSX_.Format.FontName,  'Calibri')
     Loc:Control{Prop:FontSize}    = Choose(MyXLSX_.Format.FontSize   > 1, MyXLSX_.Format.FontSize,  11)
     Loc:Control{Prop:FontStyle}   = Choose(MyXLSX_.Format.FontStyle  > 0, MyXLSX_.Format.FontStyle, Font:Regular)
     Loc:Control{Prop:FontCharSet} = CHARSET:CYRILLIC

     Loc:Control{Prop:Left}    = True     
     Loc:Control{Prop:Width}   = WidthPixels_
     Loc:Control{Prop:Text}    = Clip(Str_)

     Loc:LineCount = Loc:Control{Prop:LineCount}
     Destroy(Loc:Control)
  end

  Window_{Prop:Pixels} = False
  Return(MyXLSX_.SetRow(Row_,Choose(Loc:LineCount > 1,Loc:LineCount,1) * OneRowHeight_))
Ну и собственно экспорт текста в несколько строк для объединённых ячеек в строке:

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

      Loc:Str = 'Какой-то там длиннннный текст ...'
      Loc:Row = 5

      Loc:MyXLSX.ClearFormat()
      Loc:ErrorCode = Loc:MyXLSX.SetColumn( 2, 2,10)
      Loc:ErrorCode = Loc:MyXLSX.SetColumn( 3, 3, 8)
      Loc:ErrorCode = Loc:MyXLSX.SetColumn( 4, 4,40)
      Loc:ErrorCode = Loc:MyXLSX.SetColumn( 5, 5,12)

      Loc:ErrorCode = XLSX_RowHeight(Loc:MyXLSX,ProgressWindow,Loc:Row,Loc:Str,510,15)
      Loc:ErrorCode = Loc:MyXLSX.Merge(Loc:Row, 2, Loc:Row, 5, Loc:Str)
Что плохо: тебуется наличие открытого окна и ширина колонок выставляется в УЕ Excel , а параметр с шириной ячейки для текста WidthPixels_ - в пикселях. :( Есть идеи как разрулить эти вопросы ? ;)
Последний раз редактировалось Игорь Столяров 03 Февраль 2018, 22:36, всего редактировалось 1 раз.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5239
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

У меня открытое окно внутри класса упрятано, снаружи не торчит. Ширины колонок и высоты строк складываю по заданным значениям в единицах excel, переводя по ходу в мм, чтобы удобнее было контролировать по бланку в calc. Ширину потом перевожу в dialog units через коэффициент, вычисляемый путем присвоения окну prop:mm. Но почему-то в результате отклонение, поэтому умножаю на коэффициент 0.75, появляется запас и в большинстве случаев выводится все корректно. Хотя иногда строка может получиться выше. Я на этом остановился, в целом результат приемлемый.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Вам проще, т.к. Вы делаете то, что сами и будите использовать в прикладных задачах.
Можно подстаиваться под конкретный интерфейс, офисный пакет, вводить методом тыка поправки и т.д.
И всё будет супер, т.к. никому кроме Вас не нужно. А мне хотелось бы получить общее и понятное решение этого вопроса.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5239
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Из непонятного только применение коэффициента 0.75 при расчете ширины контрола. Остальное все логично. У меня есть подозрение, что точного решения может и не быть. Вы правильно в одном из предыдущих постов написали, что разные офисные пакеты могут по разному делать переносы, хранят информацию в разных единицах измерения с неизбежными погрешностями преобразования и т.п.

К слову, столкнулся еще с багом в libre при сохранении в xlsx. Он выставляет смещения в целых единицах, а при открытии xlsx еще и пересчитывает их, в результате чего получается третье число...

И еще по случаю позволю себе маленькую ремарку насчет управления границами во враппере, которую Вы обсуждали здесь. Границы могут иметь стиль и цвет. Кроме этого признак их использования по заданной стороне. Это следует из логики организации информации в xlsx. Вы правильно заметили, что отсутствие рамки и применение стиля "без рамки" ситуации разные.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

finsoftrz писал(а): 03 Февраль 2018, 12:12К слову, столкнулся еще с багом в libre при сохранении в xlsx.
Попробуйте обновить. На днях вышла новая версия LibreOffice 6. Красивая заставка.
Из тех "проблем", что мне известны - стало более корректное отображение картинок в XLSX. :)
Разработчики называют сие новым поколением продукта, но верить им можно не больше, чем рыбакам ... ;)
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5239
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Если удастся найти алгоритм точного перевода единиц измерения экранного контрола в экселевские, было бы здорово. Ведь если мы захотим еще разбивки по листам с итогами и переносами, то без подсчета высоты выведенных строк не обойтись...
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

finsoftrz писал(а): 03 Февраль 2018, 14:04 Ведь если мы захотим еще разбивки по листам с итогами и переносами
Да, это тоже хорошая опция, хотя в настоящий момент мы отчёты по листам в Microsoft Excel не разделяем.
А по хорошему - надо бы, те же счета-фактуры, УПД, ТОРГ-12 конечно должны иметь промежуточные итоги по листам ...

Меня сейчас больше интересует вопрос единого экспорта отчётов для всех офисных пакетов.
Экономических предпосылок для перехода всех пользователей под комфортный, но платный
Microsoft Office наблюдается чем дальше - тем меньше.

А например, та же библиотека EasyOpenOffice имеет закрытый код и зависима от версии Clarion.
И к моему глубокому сожалению, стабильно НЕ развивается (вот не хочу здесь называть вещи своими именами).
Последний официальный релиз был полтора года назад, раньше тех-поддержка отвечала хотя бы через 2 недели,
а сейчас вообще перестала. :( Пока всё работает, а если завтра (или послезавтра) вдруг выйдет Clarion 11 ? ;)

Поэтому как говорит наш кандидат: всегда надо быть готовым ответить на внешние вызовы ! :)
Make Clarion Great Again ! 😎
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Вот есть библиотека, которая может читать данные из xlsx
https://sourceforge.net/projects/xlsxio/
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

RaFaeL писал(а): 03 Февраль 2018, 18:50Вот есть библиотека, которая может читать данные из xlsx
Судя по всему и записывать тоже.
Но совсем уж куцый функционал, заточенный на последовательную перегонку текста из XLSX в CSV и обратно. :(
Не, мы лучше со старым барином останемся, в libxlsxwriter всё намного приятней. :)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8032
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

libxlsxwriter for Clarion

Сообщение Игорь Столяров »

Ой ! Мне тут GitHub/John McNamara бросил пост: There is now a fix for this on the master branch ! :)
Это значит, что группировка строк добавлена !?

В описании на сайте ничего нет ... А что такое "master branch" ? Может какой-то раздел для бета-тестирования ?
Последний раз редактировалось Игорь Столяров 03 Февраль 2018, 20:29, всего редактировалось 2 раза.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5239
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 65 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

По поводу расчета ширины экранного контрола, у меня предположение, что надо учитывать рамки ячеек. Как нибудь выберу время, проверю.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1411
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Игорь Столяров писал(а): 03 Февраль 2018, 19:43Судя по всему и записывать тоже.
Но совсем уж куцый функционал, заточенный на последовательную перегонку текста из XLSX в CSV и обратно.
Не, мы лучше со старым барином останемся, в libxlsxwriter всё намного приятней.
Писать, конечно, лучже сабжем, тут не обсуждается
А вот если надо читать, то можно и попробовать. В соседней теме вон читают )) Мне бы пригодилось для импорта данных, пока там OLE либо CSV. Без перегонки, напрямую, перегонка там сама по себе отдельно живет
Ответить