Страница 33 из 61

libxlsxwriter for Clarion

Добавлено: 24 Февраль 2018, 22:52
RaFaeL
Если есть другие параметры формата, то сработает через очистку картинки. В примере проблема в том, что формат получается пустой

libxlsxwriter for Clarion

Добавлено: 25 Февраль 2018, 1:29
vic7tar
Игорь Столяров писал(а): 22 Февраль 2018, 8:11...Корректную работу WrapText можно получить только с размером шрифта по умолчанию.
Иначе надо всегда рассчитывать и выставлять высоту строки в зависимости от длины текста и параметров шрифта.
Ширина и высота строки зависят от параметров шрифта и его размера, их спокойно можно вычислять. А вот с определением ширины и высоты ячейки (строки и колонки) - тут проблемки, вернее отсутствие информации. Если вписать в ячейку какой-нибудь текст, то внутри ячейки присутствуют внутренние отступы текста от границ ячейки (слева или справа, сверху или снизу), которые явно зависят от размера шрифта и формата ячейки (левого или правого горизонтального выравнивания с n отступами, вертикального выравнивания).
По каким правилам рассчитываются эти отступы? - выясняю уже неделю, пока бес толку.

libxlsxwriter for Clarion

Добавлено: 25 Февраль 2018, 6:16
Игорь Столяров
RaFaeL писал(а): 24 Февраль 2018, 22:52Если есть другие параметры формата, то сработает через очистку картинки.
OK ! Это решило бы вопрос. Подскажите пожалуйста, а как выполнить эту самую очистку картинки ?
Можно ли хотеть метод ClearPicture(), который сбросил бы параметры картинки, но оставил бы другие настройки формата ?

libxlsxwriter for Clarion

Добавлено: 25 Февраль 2018, 9:02
RaFaeL
Picture=''
ExcelMask=''

libxlsxwriter for Clarion

Добавлено: 25 Февраль 2018, 9:18
Игорь Столяров
Да, всё получилось ... Спасибо ! :)

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 15:10
Игорь Столяров
Загадка - шутка для всех ценителей сабжа ! ;)
Почему приведённый ниже безобидный код валит экспорт в XLSXWriter ?

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

  ...
Loc:R1 Real(0)
Loc:R2 Real(0)

  CODE
  ...
  xlsx.ClearFormat()
  err#=xlsx.WriteNumber(1,1,Loc:R1 / Loc:R2)

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 17:25
kreator
Метод WriteNumber валится? Или где-то дальше?

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 17:38
Игорь Столяров
kreator писал(а): 27 Февраль 2018, 17:25Метод WriteNumber валится? Или где-то дальше?
Нет. Всё прекрасно и молча отрабатывается.
Вот только полученный XLSX файл является некорректным и не открывается Microsoft Excel.

Возможно, что-то с неправильной передачей данных непосредственно в DLL XLSXWriter,
потому что число передаётся в метод по значению и вот так всё работает:

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

  xlsx.ClearFormat()
  err#=xlsx.WriteNumber(1,1, 0 / 0)

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 17:46
kreator
Библиотека честно пишет в файл значок бесконечности. А Эксель его не воспринимает. :D
А если без шуток, то результат деления на ноль в Кларионе ноль. Или я не прав? Если прав, то любой ноль должен давать такой результат. Проверьте.

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 17:53
Игорь Столяров
kreator писал(а): 27 Февраль 2018, 17:46Если прав, то любой ноль должен давать такой результат.
Нет, нет, нет ! Ноль прекрасно записывается, с этим нет никаких проблем.
Чек внутри метода тоже показывает, что переменная содержит 0 (ноль) на момент вызова функции из DLL ...
Но вот дальше, что-то происходит ... :(

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 18:12
kreator
Игорь Столяров писал(а): 27 Февраль 2018, 17:53 Ноль прекрасно записывается, с этим нет никаких проблем.
А 0.0000000001? Или 0.1E-15? Если тупо сделать round(Loc:R1 / Loc:R2, 0.0000000001)? Ненаучно! Да. Но чудес не бывает, число ведь вещественное. Получается, что не чистый ноль.

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 18:20
Игорь Столяров
kreator писал(а): 27 Февраль 2018, 18:12Получается, что не чистый ноль.
Или не совпадение типов данных при вызове процедуры из DLL ...
REAL - вообще самый неприятный тип данных, везде реализован с какими-то оговорками .... :(

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 18:32
RaFaeL
Скорее всего, она не содержит 0, а просто выводится 0 когда вы пытаетесь ее прочитать, а внутри там в этот момент неопределенность, которая и передается в библиотеку и затем пишется в файл
https://ru.wikipedia.org/wiki/NaN
Поскольку здесь https://libxlsxwriter.github.io/workshe ... e8580c2289 написано что Эксель не поддерживает неопределенности но по IEEE-754 они допустимы, считаю что это не глюк а фича, проверять надо, что на что делим )) Или хотя бы сначала рассчитывать, потом передавать
Но пример интересный

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 18:42
Игорь Столяров
RaFaeL писал(а): 27 Февраль 2018, 18:32а внутри там в этот момент неопределенность
И вроде бы да .... но есть 3 нюанса ... Забудем пока про LibXLSXWriter, смотрим со стороны Clarion.

1. Насколько я помню, нигде в документации на Clarion не указано, что что при делении на ноль в REAL записывается
неопределённость. Или тогда должна была быть проверка на эту неопределённость, что-то вроде проверки адреса на NULL.

2. Очень странно, что округление "неопределённости" до любой точности всегда даёт в результате явный ноль.
Не предельно минимальное / максимальное значение для этого типа данных, а именно конкретный ноль.

3. При использовании типа данных LONG в том же примере никаких неопределённостей не возникает.
Просто ноль и никаких проблем с LibXLSXWriter.

libxlsxwriter for Clarion

Добавлено: 27 Февраль 2018, 18:45
Губин Игорь
Игорь Столяров писал(а): 27 Февраль 2018, 18:42асколько я помню
В Clarion вообще сложности с обработкой всяких "ситуаций". К примеру, примитивного переполнения от +=1 при бесконечном цикле