Сделал уже, просто не выкладывал пока. Жду, пока поправят баг с нулевыми отступами в колонтитулахИгорь Столяров писал(а): ↑03 Январь 2018, 21:18Хотелось бы иметь возможность скрывать / показывать строки / колонки.
Как я понял из описания, вроде бы такой функционал уже реализован в worksheet_set_row_opt() / worksheet_set_column_opt()
libxlsxwriter for Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1378
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
libxlsxwriter for Clarion
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
libxlsxwriter for Clarion
Мой опыт говорит, что ни фига Excel сам не раздвигает строки. Попробуйте ячейке дать атрибут WrapText, а её высоту оставить на одну строку. Сохраняйте. Так и будет открываться. Есть в OLE команда для правильного раздвижения строк, навскидку не помню, можно посмотреть.Игорь Столяров писал(а): ↑04 Январь 2018, 12:40Да, Microsoft Excel записывает в аттрибут HT высоту строки ...
Но ведь в Microsoft Excel и оригинальный (записанный в XLSXWriter) сразу открывается с раздвижкой строк.
Значит параметр WrapText управляется каким-то другим тегом, который Libre Calc игнорирует.
Здесь нужно знать спецификацию XLSX формата, потому что методом "исcледования выхлопа" можно разбираться бесконечно долго.
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4634
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
Я так понимаю, что раздвигает, если высота строки не задана явно в 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 ...
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
libxlsxwriter for Clarion
А можно в xlsx задать стиль ячейки без высоты этой ячейки? Я что-то сомневаюсь в этом? В том не совсем правильном xml так не получается. Всё равно есть некая высота по умолчанию.
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7388
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
libxlsxwriter for Clarion
Сразу скажу, что не являюсь знатоком спецификации формата XLSX ...
Но если работать по выхлопу (как некоторые товарищи), то получается, что атрибут HT внутри тега ROW в XLSX отсутствует.
(если конечно, явно не задавать высоту строки). И выставляется стиль TextWrap для ячейки.
Судя по всему, при отсутствии явно указанной высоты строки (HT), далее происходит следующее:
- Microsoft Excel: применяет к ячейке стиль TextWrap и раздвигает строку по тексту.
- Libre Calc: игнорирует наличие стиля и тупо выставляет высоту строки по умолчанию.
Вот и всё ...
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
libxlsxwriter for Clarion
Понятно. Это классно. Другое дело, что сам Эксель так не запишет.
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7388
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
libxlsxwriter for Clarion
Ну а других-то вариантов по сути нет. 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
Немного не так. В стиле высота строки не задается. Там задается wraptext среди прочего. Libre Calc стиль применяет, wraptext делает, но высоту строки оставляет по умолчанию. Это и есть баг. OO Calc и Excel в этом случае (когда применен стиль с wraptext и для строки явно не задана высота) делают высоту строки не по умолчанию, а увеличивают автоматически до размера wraptext. По содержимому xml файлов все прекрасно видно...Игорь Столяров писал(а): ↑05 Январь 2018, 16:01Сразу скажу, что не являюсь знатоком спецификации формата XLSX ...
Но если работать по выхлопу (как некоторые товарищи), то получается, что атрибут HT внутри тега ROW в XLSX отсутствует.
(если конечно, явно не задавать высоту строки). И выставляется стиль TextWrap для ячейки.
Судя по всему, при отсутствии явно указанной высоты строки (HT), далее происходит следующее:
- Microsoft Excel: применяет к ячейке стиль TextWrap и раздвигает строку по тексту.
- Libre Calc: игнорирует наличие стиля и тупо выставляет высоту строки по умолчанию.
Вот и всё ...
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4634
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
libxlsxwriter for Clarion
К слову. Спецификации 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 окна, параметры нужно объявлять:
Иначе GPF. Причины вроде бы понятны ...
Здесь конечно дело хозяйское, но может быть есть смысл объявить опции как STATIC внутри метода,
присвоить им переданные в метод значения и уже с ними вызывать worksheet_insert_image_opt() ... ?
Подозреваю, что то же самое будет со всеми параметрами опций, передаваемых по адресу ...
При вызове метода InsertImage() с масштабированием из MDI окна, параметры нужно объявлять:
Код: Выделить всё
options1 GROUP(imageoptions),STATIC
END
Здесь конечно дело хозяйское, но может быть есть смысл объявить опции как STATIC внутри метода,
присвоить им переданные в метод значения и уже с ними вызывать worksheet_insert_image_opt() ... ?
Подозреваю, что то же самое будет со всеми параметрами опций, передаваемых по адресу ...
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 1703
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
libxlsxwriter for Clarion
Игорь у Вас получилось "вписать" image в размер клетки?Игорь Столяров писал(а): ↑05 Январь 2018, 21:33 При вызове метода InsertImage() с масштабированием из MDI окна, параметры нужно объявлять:
Код: Выделить всё
options1 GROUP(imageoptions),STATIC END
“Есть всего 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
Там в другом проблема, группа должна больше полей содержать, чем в документации, я это тоже уже поправилИгорь Столяров писал(а): ↑05 Январь 2018, 21:33При вызове метода InsertImage() с масштабированием из MDI окна, параметры нужно объявлять:
- Игорь Столяров
- Ветеран движения
- Сообщения: 7388
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
libxlsxwriter for Clarion
Упс ! Прикольно. Давайте тогда это проверим ...
За теми кто отстал - не возвращаться. (С) Кодекс