AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2015, 13:23   #1  
ackid is offline
ackid
Участник
 
34 / 12 (1) ++
Регистрация: 21.10.2013
Загрузка Excel через OXML (конвертация типов данных)
Всем привет .

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

X++:
OXMLCell_RU                         oxmlCell;
;
oxmlCell.getValue();
Она мне возвращает строку, но как быть с типами данных, сейчас наткнулся на даты(((

Есть дата 26.03.2015, oxmlCell.getValue() мне даёт 42089.

Вообще, тему можно было назвать конвертация из числа в дату)) но мне кажется, тут сама суть в oxml.
Кто сталкивался, поделитесь.
Старый 28.04.2015, 13:34   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Стандартный способ хранения дат и времени в виде числа

Целая часть - количество дней, прошедших от некоторой фиксированной даты
Дробная часть - отношение количества секунд, прошедших с полуночи к количеству секунд в сутках

Если от 26.03.2015 вычесть 42089 дней, то получим дату 30.12.1899. Хотя, обычно, за точку отсчета берут дату 01.01.1900.

Может быть у Вас все-таки дата 28.03.2015? Тогда конвертация в дату будет выглядеть так

X++:
TransDate transDate;

transDate = dateNull() + oxmlCell.getValue();
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 28.04.2015, 14:08   #3  
ackid is offline
ackid
Участник
 
34 / 12 (1) ++
Регистрация: 21.10.2013
Владимир спасибо, что разъяснил.

Но все равно странно , если в excel в ячейку вбить дату (формат ячейки дата) 25.03.2015, и указать формат ячейки общий - то число будет - 42088.

dateNull() + oxmlCell.getValue() = число 27.03.2015

Конечно можно отнимать 2 дня ))) но мне кажется это не есть гуд )
Старый 28.04.2015, 14:20   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от ackid Посмотреть сообщение
Конечно можно отнимать 2 дня ))) но мне кажется это не есть гуд )
Нормально это. Вы же пытаетесь выполнить конвертацию из одной системы в другую. Без констант здесь не обойтись.

Для Axapta даты меньше 01.01.1900 - не существует. А что есть "базовая дата" для Excel - не известно. Очень сложно найти информацию по системным ограничениям Excel. Как следствие, остается только подгонка через константы.

Кстати, скорее всего, "базовая дата" - это все-таки 31.12.1899. А еще 1 день - это результат округления при "переводе" типа Real в строку. Я имею в виду, что в Excel хранится дата вместе со временем. И время здесь больше полудня, что при округлении дает еще один дополнительный день.

Попробуйте все-таки прочитать не строковую величину, а числовую. Для проверки, настройте формат отображения в ячейке Excel, чтобы видеть еще часть со временем.

Подозреваю, что реально в ячейке записано нечто вроде 42087,583333
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 29.04.2015, 06:10   #6  
ackid is offline
ackid
Участник
 
34 / 12 (1) ++
Регистрация: 21.10.2013
Понял почему надо 2 дня отнимать. )))
1 день.
datenull() - это 0, то есть первая дата 01.01.1900 будет 0 , в Excel - 1

2 день (тут интереснее)
Оказалось - что в Excel 1900 год высокосный, (тут просто каждый четвертый год)
Axapta берёт стандартный календарь, а там 1900 не высокосный.
otvet.mail.ru - )))))
Старый 29.04.2015, 15:09   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Есть еще одна подстава. Если файл был подготовлен на Apple, то там сдвиг еще на 4 года.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Работа с Excel через COM нестабильна на x64 Максимка DAX: Программирование 6 27.01.2012 12:52
проблема использования Excel через clr Batuev Artem DAX: Программирование 8 22.08.2011 18:01
зкспорт данных в Excel exodus DAX: Программирование 3 25.10.2007 05:10
отчет в Excel через COM Pawlik DAX: Программирование 2 23.03.2006 15:44
Чтение Excel-ячейки в Аксапте (2.5) через COM AKIS DAX: Программирование 3 25.03.2004 20:18
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:42.