SAPфорум.RU https://sapboard.ru/forum/ |
|
Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы https://sapboard.ru/forum/viewtopic.php?f=13&t=94677 |
Страница 1 из 1 |
Автор: | maksim2050 [ Пн, апр 10 2017, 19:19 ] |
Заголовок сообщения: | Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Загружаю данные из Excel-таблицы во внутреннюю. Проблема с полями даты. В Excel-формате поля типа "Дата" имеют вид ДДД ДД-МММ-ГГ. Также пользователь хочет менять формат даты на любой другой. Их в Экселе много. Мне нужно загружать Эксель-файл и сохранять значения полей типа "Дата" во внутреннюю таблицу в виде ДД.ММ.ГГГГ. Или может кто-нибудь знает ФМ, чтобы привести экселевские даты к формату ДД.ММ.ГГГГ. К примеру, ВС01-ЯНВ-2017, ВС01-ЯНВ-17, 01-ЯНВ-2017 привести к 01.01.2017. Спасибо. |
Автор: | olegbash [ Ср, апр 12 2017, 21:44 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
по сути, нужно уйти от буквенного представления даты, заменив текст. это можно сделать и в xl, создав дополнительную колонку, где преобразование будет автоматически. вариант решения через ABAP Code: types: BEGIN OF ty_str2str,
was TYPE string, target TYPE string, END OF ty_str2str, tt_str2str TYPE STANDARD TABLE OF ty_str2str . data lt_str2str TYPE tt_str2str. FIELD-SYMBOLS <fs_str> TYPE ty_str2str. data lt_xl TYPE ISSR_ALSMEX_TABLINE. data ls_xl TYPE ALSMEX_TABLINE. """" различные даты lt_xl = VALUE ISSR_ALSMEX_TABLINE( ( ROW = 1 COL = 1 VALUE = 'ВС01-ЯНВ-2017') ( ROW = 1 COL = 2 VALUE = 'ВС01-ЯНВ-17') ( ROW = 1 COL = 3 VALUE = '01-ЯНВ-2017') ( ROW = 1 COL = 3 VALUE = '1 фев 17') ). " таблица замены текстовой информации на числовую lt_str2str = value #( ( was = 'ВС' target = '' ) ( was = 'ПН' target = '' ) ( was = '-ЯНВ-' target = '.01.' ) ( was = '-ФЕВ-' target = '.02.' ) ( was = ' ФЕВ ' target = '.02.' ) ( was = ` фев ` target = '.02.' ) ). LOOP AT lt_str2str ASSIGNING <fs_str>. REPLACE ALL OCCURRENCES OF <fs_str>-was IN TABLE lt_xl WITH <fs_str>-target IGNORING CASE. ENDLOOP. LOOP AT lt_xl ASSIGNING FIELD-SYMBOL(<fs_xl>). write: / <fs_xl>-value . CONDENSE <fs_xl>-value NO-GAPS. call function 'CONVERT_DATE_TO_INTERNAL' exporting date_external = <fs_xl>-value * ACCEPT_INITIAL_DATE = IMPORTING DATE_INTERNAL = <fs_xl>-value EXCEPTIONS DATE_EXTERNAL_IS_INVALID = 1 OTHERS = 2 . if sy-subrc <> 0. * Implement suitable error handling here write 'No result'. else. WRITE <fs_xl>-value. endif. ENDLOOP. |
Автор: | olegbash [ Ср, апр 12 2017, 21:50 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
но нужно иметь в ввиду также, что есть еще и пользовательские форматы (то есть те которые они сами могут себе придумать), а также тот факт, что файл может быть на разных языках ... внутри же SAP доступно, как известно, 12 форматов даты. датe по формату можно переводить и проверять через cl_abap_datfm=>conv_date_ext_to_int () Форматы: 1 DD.MM.YYYY 2 MM/DD/YYYY 3 MM-DD-YYYY 4 YYYY.MM.DD 5 YYYY/MM/DD 6 YYYY-MM-DD 7 GYY.MM.DD 8 GYY/MM/DD A YYYY/MM/DD B YYYY/MM/DD C YYYY/MM/DD |
Автор: | Sam Stone [ Чт, апр 13 2017, 07:13 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
olegbash написал(а): но нужно иметь в ввиду также, что есть еще и пользовательские форматы (то есть те которые они сами могут себе придумать), а также тот факт, что файл может быть на разных языках ... Я почему-то подумал, что дата в экселе всегда хранится в одном определенном формате, что-нибудь типа datetime, а пользовательский формат это лишь способ отображения этого значения. maksim2050 Чем грузится эксель? |
Автор: | Кодер [ Чт, апр 13 2017, 08:47 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Sam Stone написал(а): Я почему-то подумал, что дата в экселе всегда хранится в одном определенном формате, Так и есть. Это число вообще. Что-то типа "количество секунд с определенной даты" Просто ТС скорее всего получает данные из экселя через копирование буфера. В этом случае передается экранное представление. Ну и возможен вариант, когда в экселе графу объявили как "текст", а хранят там дату. |
Автор: | olegbash [ Чт, апр 13 2017, 08:59 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Если считывать через ФМ ALSM_EXCEL_TO_INTERNAL_TABLE, то преобразование требуется, как ни храни дату (хоть в тексте, хоть в формате даты). Цитата: Так и есть. Это число вообще. Что-то типа "количество секунд с определенной даты" не количество секунд. количество дней с 1 января 1900 для Windows. и для Mac-версии с 1 января 1904. https://support.microsoft.com/ru-ru/hel ... m-in-excel |
Автор: | olegbash [ Чт, апр 13 2017, 09:16 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Sam Stone написал(а): Я почему-то подумал, что дата в экселе всегда хранится в одном определенном формате, что-нибудь типа datetime, а пользовательский формат это лишь способ отображения этого значения. не datetime. а пользовательский формат - это уже может быть даже не "формат даты" в терминах excel, а текст. |
Автор: | Sam Stone [ Чт, апр 13 2017, 10:16 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Использовать TEXT_CONVERT_XLS_TO_SAP вместо ALSM_EXCEL_TO_INTERNAL_TABLE. Он нормально всё съел. |
Автор: | olegbash [ Чт, апр 13 2017, 12:36 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Sam Stone написал(а): Использовать TEXT_CONVERT_XLS_TO_SAP вместо ALSM_EXCEL_TO_INTERNAL_TABLE. Он нормально всё съел. Спасибо! Хоть и время они неправильно конвертирует, но даты, действительно, верно. Время берет как хранится. |
Автор: | maksim2050 [ Пн, апр 24 2017, 13:12 ] |
Заголовок сообщения: | Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы |
Я реализовал примерно как рекомендовал olegbash в самом начале. Сделал внутреннее преобразование символов в номер месяца . Использовал ФМ который достает из exel данные в виде string . TEXT_CONVERT_XLS_TO_SAP отлично работает. Но у меня при загрузке , если были ячейки дата+время, то ФМ выдавал ошибку |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |