Текущее время: Сб, мар 30 2024, 07:13

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Пн, апр 10 2017, 19:19 
Специалист
Специалист

Зарегистрирован:
Пн, авг 27 2012, 13:27
Сообщения: 139
Загружаю данные из Excel-таблицы во внутреннюю.

Проблема с полями даты. В Excel-формате поля типа "Дата" имеют вид ДДД ДД-МММ-ГГ. Также пользователь хочет менять формат даты на любой другой. Их в Экселе много.

Мне нужно загружать Эксель-файл и сохранять значения полей типа "Дата" во внутреннюю таблицу в виде ДД.ММ.ГГГГ.
Или может кто-нибудь знает ФМ, чтобы привести экселевские даты к формату ДД.ММ.ГГГГ. К примеру, ВС01-ЯНВ-2017, ВС01-ЯНВ-17, 01-ЯНВ-2017 привести к 01.01.2017.

Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Ср, апр 12 2017, 21:44 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
по сути, нужно уйти от буквенного представления даты, заменив текст.
это можно сделать и в 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.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Ср, апр 12 2017, 21:50 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
но нужно иметь в ввиду также, что есть еще и пользовательские форматы :-)
(то есть те которые они сами могут себе придумать), а также тот факт, что файл может быть на разных языках ...

внутри же 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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Чт, апр 13 2017, 07:13 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
olegbash написал(а):
но нужно иметь в ввиду также, что есть еще и пользовательские форматы :-)
(то есть те которые они сами могут себе придумать), а также тот факт, что файл может быть на разных языках ...


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

maksim2050
Чем грузится эксель?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Чт, апр 13 2017, 08:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
Sam Stone написал(а):
Я почему-то подумал, что дата в экселе всегда хранится в одном определенном формате,

Так и есть. Это число вообще. Что-то типа "количество секунд с определенной даты"
Просто ТС скорее всего получает данные из экселя через копирование буфера. В этом случае передается экранное представление.
Ну и возможен вариант, когда в экселе графу объявили как "текст", а хранят там дату.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Чт, апр 13 2017, 08:59 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
Если считывать через ФМ ALSM_EXCEL_TO_INTERNAL_TABLE, то преобразование требуется, как ни храни дату (хоть в тексте, хоть в формате даты).

Цитата:
Так и есть. Это число вообще. Что-то типа "количество секунд с определенной даты"

не количество секунд.

количество дней с 1 января 1900 для Windows.
и для Mac-версии с 1 января 1904.

https://support.microsoft.com/ru-ru/hel ... m-in-excel


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Чт, апр 13 2017, 09:16 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
Sam Stone написал(а):

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


не datetime.
а пользовательский формат - это уже может быть даже не "формат даты" в терминах excel, а текст.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Чт, апр 13 2017, 10:16 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Использовать TEXT_CONVERT_XLS_TO_SAP вместо ALSM_EXCEL_TO_INTERNAL_TABLE. Он нормально всё съел.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Чт, апр 13 2017, 12:36 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
Sam Stone написал(а):
Использовать TEXT_CONVERT_XLS_TO_SAP вместо ALSM_EXCEL_TO_INTERNAL_TABLE. Он нормально всё съел.


Спасибо! :D

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Проблема с конвертацией формата даты при загрузке данных из Excel-таблицы
СообщениеДобавлено: Пн, апр 24 2017, 13:12 
Специалист
Специалист

Зарегистрирован:
Пн, авг 27 2012, 13:27
Сообщения: 139
Я реализовал примерно как рекомендовал olegbash в самом начале. Сделал внутреннее преобразование символов в номер месяца . Использовал ФМ который достает из exel данные в виде string .
TEXT_CONVERT_XLS_TO_SAP отлично работает. Но у меня при загрузке , если были ячейки дата+время, то ФМ выдавал ошибку


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB