Текущее время: Вт, мар 19 2024, 14:16

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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