libxlsxwriter for Clarion

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

libxlsxwriter for Clarion

Сообщение RaFaeL » 11 Февраль 2018, 22:14

Игорь Столяров писал(а):
04 Январь 2018, 0:45
Ещё необъяснимый фортель библиотеки ... Если выполнить код:
err# = xlsx.WriteString(13,1,'№')
то строка 13 будет пустая. Подозреваю, что проблема где-то с конвертации в UTF, потому что
при вводе напрямую в Microsoft Excel или при экспорте через OLE символ '№' нормально записывается в ячейку.
Не смертельно ... но непонятно !
Посмотрел. Действительно, теряется при конвертации в Юникод и только если единичный символ и только этот (ну может еще какие, конечно, всю таблицу не проверял). Я не знаю почему так, нужна помощь зала

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3745
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 11 Февраль 2018, 22:22

RaFaeL писал(а):
11 Февраль 2018, 22:14
Действительно, теряется при конвертации в Юникод и только если единичный символ
Ну Вы вспомнили ... Этот рубеж давно пройден. :) Просто делаем:

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

    ErrorCode = XLSX.WriteString(13, 1, '№<133>')
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 760
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 11 Февраль 2018, 22:38

Ну что я, костыли что ли вставлять буду. Мне хочется понять, что не так

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3745
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 11 Февраль 2018, 22:46

RaFaeL писал(а):
11 Февраль 2018, 22:38
Ну что я, костыли что ли вставлять буду
Не надо. Мы сами. :)
Только насколько я помню, там проблема не с конвертацией в UTF-8, а что-то в недрах worksheet_write_string() ....
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 760
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 11 Февраль 2018, 22:55

Нет, это именно конвертация, я посмотрел, WideCharToMultiByte возвращает нули. Дело в том, что оно сейчас много где используется. Практически любые веб-сервисы принимают только UTF-8. Надо бы разобраться. Может флаги какие выставить, но не подобрал

P.S. На самом деле WideCharToMultiByte возвращает ошибку 122 нехватка памяти, ему надо 3 байта на запись. Если дать 3 байта пишет туда нечто, портящее xlsx

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3745
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 12 Февраль 2018, 8:17

RaFaeL писал(а):
11 Февраль 2018, 22:55
На самом деле WideCharToMultiByte возвращает ошибку 122
У меня (не XLSXWriter) символ номера конвертируется в UTF корректно (проверил).
И не согласная я с Вашим вариантом конвертации в UTF ... :(

Попробуйте пожалуйста вот это:

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

   lenWideChar = XLSX:MultiByteToWideChar(in_,0,strInpChar,l,strWideChar,l*2)
заменить на

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


  Module('Windows')
    GetACP(),RAW,USHORT,PASCAL
  end 

    lenWideChar = XLSX:MultiByteToWideChar(GetACP(),0,strInpChar,l,strWideChar,l*2)
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3745
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 12 Февраль 2018, 9:00

И ещё по конвертации в UTF: Вы используете CString для UTF-8, а в нём не запрещён символ "<0>" внутри строки.
Посмотрите пожалуйста, как сделан метод ConvertToCodePage() в библиотеке LIBCURL ....
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 760
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 12 Февраль 2018, 10:38

Игорь Столяров писал(а):
12 Февраль 2018, 8:17
И не согласная я с Вашим вариантом конвертации в UTF ...

Попробуйте пожалуйста вот это:
...
заменить на
При вызове процедуры всегда передается 0, а если передать 0 то уже внутри MultiByteToWideChar идет вызов текущей страницы, т.е. это то же самое. Ладно, еще покопаю. Где-то тут есть недочет какой-то. Я эту процедуру изначально не сам писал, выдернул из почтовой библиотеки

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 760
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 12 Февраль 2018, 10:58

Сегодня библиотеке исполняется годик, поздравляем!

Обновил шапку. Собрал на основе версии 0.7.6. Дополнительно поправлена проблема №147. Это уже версия 0.9.9 она же RC2. Осталось разобраться с кодировками

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3745
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 12 Февраль 2018, 11:13

Ура ! Поздравляю ! :)
Ваш проект показал отличную динамику в развитии за этот год. :)
«V» значит Вендетта !

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 760
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 15 Февраль 2018, 0:23

С кодировками разобрался. Оказалось что просто переменная, которая принимает значения после перекодирования, мала - размер ставился как размер в русской кодировке *2, а символ "№" в UTF-8 будет 3 байта, а не 2

Выложил в шапку версию 1.0.0
Последний раз редактировалось RaFaeL 15 Февраль 2018, 0:26, всего редактировалось 2 раза.

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2120
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

libxlsxwriter for Clarion

Сообщение Дед Пахом » 15 Февраль 2018, 0:24

RaFaeL писал(а):
15 Февраль 2018, 0:23
UTF-18
UTF-2018?
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3745
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

libxlsxwriter for Clarion

Сообщение Игорь Столяров » 15 Февраль 2018, 21:31

Имеет место быть проблема cо всеми формулами в синтаксисе которых есть перечисление.
Выполняем потешный код и получаем нерабочий XLSX:

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

  err#=xlsx.WriteFormula(1,1,'=IF(A1>A2;A1;A2)')
Проблему можно обойти, если заменить разделители:

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

  err#=xlsx.WriteFormula(1,1,'=IF(A1>A2,A1,A2)')
Что в общем-то неправильно с точки зрения синтаксиса Microsoft Excel, но именно в таком виде формула хранится в XLSX ... :(

Уже увидел описание на сайте LIBXLSXWRITER .... оказывается это документрованная особенность. ;)
«V» значит Вендетта !

Аватара пользователя
vic7tar
Активист
Сообщения: 147
Зарегистрирован: 09 Февраль 2017, 20:12

libxlsxwriter for Clarion

Сообщение vic7tar » 17 Февраль 2018, 21:18

Игорь Столяров писал(а):
15 Февраль 2018, 21:31
...Что в общем-то неправильно с точки зрения синтаксиса Microsoft Excel, но именно в таком виде формула хранится в XLSX ... :(
Да, как-то непривычно. Вопрос скорее к RaFaeL - нельзя ли передавать в worksheet_write_formula формулы с ';' ( "=IF(A1>A2;A1;A2)" ), а в ней произвести подмену ';' на ',' ( "=IF(A1>A2,A1,A2)" ) ?
C10, Win10x64

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 760
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

libxlsxwriter for Clarion

Сообщение RaFaeL » 17 Февраль 2018, 21:30

Нет. Но можно написать свой класс на основе моего и сделать там свой метод, который будет подменять и вызывать мой метод ))
Хотя я подумаю

Ответить