libxlsxwriter for Clarion

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

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

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

libxlsxwriter for Clarion

Сообщение RaFaeL »

Игорь Столяров писал(а): 03 Январь 2018, 21:18Хотелось бы иметь возможность скрывать / показывать строки / колонки.
Как я понял из описания, вроде бы такой функционал уже реализован в worksheet_set_row_opt() / worksheet_set_column_opt()
Сделал уже, просто не выкладывал пока. Жду, пока поправят баг с нулевыми отступами в колонтитулах
kreator
✯ Ветеран ✯
Сообщения: 4994
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

libxlsxwriter for Clarion

Сообщение kreator »

Игорь Столяров писал(а): 04 Январь 2018, 12:40Да, Microsoft Excel записывает в аттрибут HT высоту строки ...
Но ведь в Microsoft Excel и оригинальный (записанный в XLSXWriter) сразу открывается с раздвижкой строк.
Значит параметр WrapText управляется каким-то другим тегом, который Libre Calc игнорирует.
Здесь нужно знать спецификацию XLSX формата, потому что методом "исcледования выхлопа" можно разбираться бесконечно долго.
Мой опыт говорит, что ни фига Excel сам не раздвигает строки. Попробуйте ячейке дать атрибут WrapText, а её высоту оставить на одну строку. Сохраняйте. Так и будет открываться. Есть в OLE команда для правильного раздвижения строк, навскидку не помню, можно посмотреть.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4634
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 7 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Я так понимаю, что раздвигает, если высота строки не задана явно в xlsx. OO Calc делает именно так, excel под рукой нет проверить. Судя по реплике Игоря, аналогично. XlsxWriter высоту строки явно прописывает, если только вызвана соответствующая функция.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

libxlsxwriter for Clarion

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

kreator писал(а): 05 Январь 2018, 12:50Попробуйте ячейке дать атрибут WrapText, а её высоту оставить на одну строку. Сохраняйте. Так и будет открываться.
Тут, как говорится - следует определиться .... :) Последовательность действий имеет значение.
Если задаём ячейке WrapText, а ПОТОМ принудительно выставляем высоту строки - то конечно строка будет показана заданной высоты.
А если наоборот, то высота строки выставляется по тексту и запоминается.

Написанное в этой теме относится к библиотеке LibXLSXWriter (по крайне мере у меня). ;)
Если мы для ячейки выставляем WrapText - то в Microsoft Excel строка раздвигается по тексту, а в Libre Calc - нет.

И всё бы не беда, но попа возникает немного по другой причине.
В отличии от OLE, нельзя получить реальную высоту строки для ячейки с аттрибутом WrapText, что бы выставить её принудительно.
Увы ! :( С другой стороны - это проблема Libre Calc, а не LibXLSXWriter ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4994
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

libxlsxwriter for Clarion

Сообщение kreator »

А можно в xlsx задать стиль ячейки без высоты этой ячейки? Я что-то сомневаюсь в этом? В том не совсем правильном xml так не получается. Всё равно есть некая высота по умолчанию.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

libxlsxwriter for Clarion

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

kreator писал(а): 05 Январь 2018, 15:28Всё равно есть некая высота по умолчанию.
Сразу скажу, что не являюсь знатоком спецификации формата XLSX ...
Но если работать по выхлопу (как некоторые товарищи), то получается, что атрибут HT внутри тега ROW в XLSX отсутствует.
(если конечно, явно не задавать высоту строки). И выставляется стиль TextWrap для ячейки.

Судя по всему, при отсутствии явно указанной высоты строки (HT), далее происходит следующее:
- Microsoft Excel: применяет к ячейке стиль TextWrap и раздвигает строку по тексту.
- Libre Calc: игнорирует наличие стиля и тупо выставляет высоту строки по умолчанию.
Вот и всё ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4994
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

libxlsxwriter for Clarion

Сообщение kreator »

Игорь Столяров писал(а): 05 Январь 2018, 16:01 атрибут HT внутри тега ROW в XLSX отсутствует.
Понятно. Это классно. Другое дело, что сам Эксель так не запишет.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

libxlsxwriter for Clarion

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

kreator писал(а): 05 Январь 2018, 16:06Это классно. Другое дело, что сам Эксель так не запишет.
Ну а других-то вариантов по сути нет. LibXLSXWriter не требует наличия Microsoft Excel, а значит не знает его установки по умолчанию.
При задании значения высоты строки "по умолчанию" используется: LXW_DEF_ROW_HEIGHT = 15, что может совсем не соответствовать
настройкам конкретной копии Microsoft Excel, в которой будет открыт XLSX файл. Поэтому, действительно, лучше высоту строки явно
не выставлять, а дать возможность это сделать Microsoft Excel при открытии XLSX файла. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4634
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 7 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

Игорь Столяров писал(а): 05 Январь 2018, 16:01
kreator писал(а): 05 Январь 2018, 15:28Всё равно есть некая высота по умолчанию.
Сразу скажу, что не являюсь знатоком спецификации формата XLSX ...
Но если работать по выхлопу (как некоторые товарищи), то получается, что атрибут HT внутри тега ROW в XLSX отсутствует.
(если конечно, явно не задавать высоту строки). И выставляется стиль TextWrap для ячейки.

Судя по всему, при отсутствии явно указанной высоты строки (HT), далее происходит следующее:
- Microsoft Excel: применяет к ячейке стиль TextWrap и раздвигает строку по тексту.
- Libre Calc: игнорирует наличие стиля и тупо выставляет высоту строки по умолчанию.
Вот и всё ... :)
Немного не так. В стиле высота строки не задается. Там задается wraptext среди прочего. Libre Calc стиль применяет, wraptext делает, но высоту строки оставляет по умолчанию. Это и есть баг. OO Calc и Excel в этом случае (когда применен стиль с wraptext и для строки явно не задана высота) делают высоту строки не по умолчанию, а увеличивают автоматически до размера wraptext. По содержимому xml файлов все прекрасно видно...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4634
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 7 раз
Поблагодарили: 37 раз

libxlsxwriter for Clarion

Сообщение finsoftrz »

К слову. Спецификации xlsx, как я понял, в природе нет. Есть некий открытый формат хранения данных, на основе которого сделан xlsx. Если не ошибаюсь, ods тоже его реализация, но сделанная другой группой разработчиков. Описание этого формата, как пишут, составляет 5000 страниц и он весьма сложен. Плюсом надо учесть конкретную реализацию и ее поддержку разными офисными пакетами. А вот тут может быть немало сюрпризов, один из которых мы сейчас обсуждаем. Кстати, автор библиотеки libxlsxWriter рекомендовал всегда явно указывать высоту строки в ответ на вопрос о баге в libre calc. Интересно, как он себе это представляет...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

libxlsxwriter for Clarion

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

Ok ! Тогда продолжаем разговор об особенностях использования LibXLSXWriter с Clarion ...

При вызове метода InsertImage() с масштабированием из MDI окна, параметры нужно объявлять:

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

options1  GROUP(imageoptions),STATIC
     END
Иначе GPF. :( Причины вроде бы понятны ...
Здесь конечно дело хозяйское, но может быть есть смысл объявить опции как STATIC внутри метода,
присвоить им переданные в метод значения и уже с ними вызывать worksheet_insert_image_opt() ... ?
Подозреваю, что то же самое будет со всеми параметрами опций, передаваемых по адресу ...
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1703
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

libxlsxwriter for Clarion

Сообщение gopstop2007 »

Игорь Столяров писал(а): 05 Январь 2018, 21:33 При вызове метода InsertImage() с масштабированием из MDI окна, параметры нужно объявлять:

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

options1  GROUP(imageoptions),STATIC
     END
Игорь у Вас получилось "вписать" image в размер клетки?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

libxlsxwriter for Clarion

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

gopstop2007 писал(а): 06 Январь 2018, 15:49Игорь у Вас получилось "вписать" image в размер клетки?
Да. Точнее я сделал набросок - а после праздников сделаю уже универсальный метод.
Идея следующая:
- Динамически создаём Image, вставляем в него картинку и определяем её размер. Убиваем Image;
- По заданному размеру рисунка и ячейки расчитываем коэффициенты масштабирования для вставки;
- По форме рисунка (не всегда квадрат) рассчитываем отступы, что бы попасть в центр клетки (здесь ещё нужно доделать);
- Всё. Вставляем рисунок в клетку с заданным масштабом и отступами. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1378
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL »

Игорь Столяров писал(а): 05 Январь 2018, 21:33При вызове метода InsertImage() с масштабированием из MDI окна, параметры нужно объявлять:
Там в другом проблема, группа должна больше полей содержать, чем в документации, я это тоже уже поправил
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

libxlsxwriter for Clarion

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

RaFaeL писал(а): 06 Январь 2018, 23:25группа должна больше полей содержать, чем в документации
Упс ! Прикольно. Давайте тогда это проверим ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить