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. Он нормально всё съел.


Спасибо! :D

Хоть и время они неправильно конвертирует, но даты, действительно, верно.
Время берет как хранится.

Автор:  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/