Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Spreadsheet::ParseExcel неверно читает текстовые ячейки (Lvovich)
Author Message
Lvovich
Участник форума



Joined: 24 Jun 2004
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Tue Nov 27, 2012 5:01 pm (написано за 7 минут 27 секунд)
   Post subject: Spreadsheet::ParseExcel неверно читает текстовые ячейки
Reply with quote

Потребовалось прочитать и разобрать таблицу MS Excel, использовал данную библиотеку, столкнулся с проблемой, которую не получается решить:
при чтении ячеек, в которых есть перечисление кодов через запятую, на выходе получаю десятичное число.
Например: текст "134569,55408" преобразуется в "134569.55408", текст "13636,16689" в "13636.16689" и т.п.
Такая информация у меня встречается часто, и данная библиотека исправно переводит все тексты в числа (запятые - в точки).
Причем, и метод value(), и метод unformatted() дают одинаковые результаты, т.е., преобразование происходит еще на уровне чтения ячеек таблицы.

Как решить эту проблему, не могу понять! Прошу вашей помощи!
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Tue Dec 04, 2012 11:04 pm (спустя 7 дней 6 часов 2 минуты; написано за 1 минуту 43 секунды)
   Post subject:
Reply with quote

Lvovich wrote:
Как решить эту проблему, не могу понять! Прошу вашей помощи!
А вариант после чтения данных, в скрипте их проверить и заменить обратно не подходит?

В противном случае надо ковырять исходники Spreadsheet::ParseExcel, а что-то мне подсказывает, что это будет очень непросто.

P.S. Плюс надо понять, в каком виде вообще хранятся данные внутри файла MS Excel...
Back to top
View user's profile Send private message Send e-mail
Lvovich
Участник форума



Joined: 24 Jun 2004
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Sat Dec 08, 2012 11:53 am (спустя 3 дня 12 часов 48 минут; написано за 13 минут 30 секунд)
   Post subject:
Reply with quote

Проблему решил.
Дело было в настройках Windows + Excel.
В Excel, по умолчанию, стояло "использовать системные разделители", а в Windows, в региональных настройках, разделителем между целой и дробной частью стояла запятая.
Вот и получилось, что, при заполнении ячейки числом "12345,6789", Excel считала, что это - Numeric, а я видел через запятую.
Стоило мне поставить в системе разделителем точку, как сразу те числовые ячейки, которые я видел с запятой, стали видны с точкой.
Ну, главное, понять проблему, а решений несколько: можно убрать галочку "использовать системные разделители" из настроек Excel, можно в системных разделителях выбрать точку.
Можно менять уже в Perl в десятичных числах точку на запятую
Code (perl): скопировать код в буфер обмена
s/\./,/
что я и сделал. Но это не совсем надежный вариант, т.к. десятичное число мы видим, например, "123.9876", а храниться оно может как "123.98759999999", и при обработке Perl-библиотека считывает не округленное число, т.е., информация искажается.

Ну вот, где-так... Большую помощь в решении оказал автор библиотеки Spreadsheet::ParseExcel John McNamara, в чем я ему очень благодарен.
Нашу переписку можно прочитать на groups.google.com/forum/?fromgroups=#!topic/spreadsheet-parseexcel/aUNHKObI9Aw
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6837
Карма: 131
   поощрить/наказать


PostPosted: Mon Jan 14, 2013 8:18 pm (спустя 1 месяц 6 дней 8 часов 25 минут; написано за 44 секунды)
   Post subject:
Reply with quote

Lvovich wrote:
Но это не совсем надежный вариант, т.к. десятичное число мы видим, например, "123.9876", а храниться оно может как "123.98759999999", и при обработке Perl-библиотека считывает не округленное число, т.е., информация искажается.
Вот тут опять не понял - что значит, "считывает не округленное число"? Сами тогда округляйте, в чем проблема?
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You cannot download files in this forum.
XML