Текущее время: Сб, май 10 2025, 18:11

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Загрузка из Excel
СообщениеДобавлено: Пт, сен 24 2004, 16:18 
Гость
Форумчане.
Помогите, пожалуйста, как правильно загрузить файла xls-формата?
И какая там должна быть структура?
Спасибо...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: ответ
СообщениеДобавлено: Пт, сен 24 2004, 20:42 
Гость
Code:
DATA  ty_t_itab   TYPE alsmex_tabline   OCCURS 0.
DATA  TEMP TYPE alsmex_tabline.
DATA: X1 TYPE I VALUE 1,
      Y1 TYPE I VALUE 1,
      X2 TYPE I VALUE 1,
      Y2 TYPE I VALUE 50000.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
     EXPORTING
          FILENAME                = P_FILE
          I_BEGIN_COL             = X1
          I_BEGIN_ROW             = Y1
          I_END_COL               = X2
          I_END_ROW               = Y2
     TABLES
          INTERN                  = ty_t_itab
EXCEPTIONS
   INCONSISTENT_PARAMETERS       = 1
   UPLOAD_OLE                    = 2
   OTHERS                        = 3.

IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

LOOP AT ty_t_itab INTO TEMP.
  IF TEMP-VALUE NE SPACE.
    ITAB-NAME = TEMP-VALUE.
    APPEND ITAB.
  ENDIF.
ENDLOOP.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Re: ответ
СообщениеДобавлено: Сб, сен 25 2004, 05:39 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
abaper_2 написал(а):
DATA ty_t_itab TYPE alsmex_tabline OCCURS 0.
...
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = X1
I_BEGIN_ROW = Y1
I_END_COL = X2
I_END_ROW = Y2
TABLES
INTERN = ty_t_itab
...


Единственное замечание - с помощью этого ФМ можно закачать файл с длинной поля не более 50 символов, поэтому если у вас есть необходимость качать файлы с длинными полями, то создайте свой ФМ на основе ALSM_EXCEL_TO_INTERNAL_TABLE


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, сен 26 2004, 20:52 
Гость
Да в принципе - взглянуть краем глаза на исходный текст этой функции - и остальное дело техники


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 27 2004, 09:03 
Гость
Если у тебя будет более одного столбца, а к примеру четыре, то цикл заполнения твоей внутр.таблицы будет примерно таким:
Code:
  LOOP AT xl_itab.
    CASE xl_itab-COL.
      WHEN 1.
        it_input-N_INV = xl_itab-VALUE.
      WHEN 2.
        it_input-DMBTR = xl_itab-VALUE.
      WHEN 3.
        it_input-AUFNV = xl_itab-VALUE.
      WHEN 4.
        it_input-AUFNL = xl_itab-VALUE.
        APPEND it_input.
    ENDCASE.
  ENDLOOP.

Также в качестве альтернативного варианата могу предложить сохранение через OLE файла во временный tab-delimited file и последующей его загрузкой через WS_UPLOAD


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 27 2004, 11:46 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Vadim написал(а):
Если у тебя будет более одного столбца, а к примеру четыре, то цикл заполнения твоей внутр.таблицы будет примерно таким:
Code:
  LOOP AT xl_itab.
    CASE xl_itab-COL.
      WHEN 1.
        it_input-N_INV = xl_itab-VALUE.
      WHEN 2.
... 



все таки лучше это сделать так (не стоит ограничивать себя количеством столбцов) :wink: :
(привожу текст ФМ, который сам успешно юзаю уже долгое время)

p_filename - имя файла для загрузки
p_tab - внутр.таблица куда грузим данные (конечно, структура этой таблицы должна совпадать со структурой закачиваемого файла - хотя бы количеству и порядку полей/столбцов)

Code:
function [b]z_excel_upload_to_inttab[/b].
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE([b]P_FILENAME[/b]) LIKE  RLGRAP-FILENAME
*"  EXPORTING
*"     REFERENCE(I_SUBRC) LIKE  SYST-SUBRC
*"  TABLES
*"      [b]P_TAB[/b]
*"----------------------------------------------------------------------
  data: l_intern type alsmex_tabline occurs 0 with header line,
        l_index type i,
        l_start_col type i value '1',
        l_start_row type i value '1',
        l_end_col type i value '256',
        l_end_row type i value '65536'.

  field-symbols : <fs>.

  call function [b]'ALSM_EXCEL_TO_INTERNAL_TABLE'[/b]
      exporting
             filename = [b]p_filename[/b]
             i_begin_col = l_start_col
             i_begin_row = l_start_row
             i_end_col = l_end_col
             i_end_row = l_end_row
         tables
             intern = [b]l_intern[/b]
     exceptions
             inconsistent_parameters = 1
             upload_ole = 2
             others = 3.

  i_subrc = sy-subrc.
  if sy-subrc > 0.
     message i000(zm) with 'Ошибка при открытии файла ... RC =' sy-subrc.
     exit.
  endif.

  if l_intern[] is initial.
     message i000(zm) with 'Данные не загружены!'.
     exit.
  else.
     sort l_intern by row col.
     loop at [b]l_intern[/b].
        move l_intern-col to l_index.
        assign component l_index of structure [b]p_tab [/b]to <fs>.
        move l_intern-value to <fs>.
        at end of row.
           append [b]p_tab[/b].
           clear p_tab.
        endat.
     endloop.
  endif.

endfunction.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 27 2004, 12:09 
Гость
Цитата:
Единственное замечание - с помощью этого ФМ можно закачать файл с длинной поля не более 50 символов

Есть ещё одно замечание. По-моему этот способ загружает данные только активного листа
А если в файле несколько листов?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 27 2004, 17:54 
Гость
Используешь нужный тебе, например:
Code:
CALL METHOD  OF application    'ActiveWorkbook' = ActiveWorkbook.
* выбираем второй лист
CALL METHOD  OF ActiveWorkbook 'Worksheets' = worksheet
   EXPORTING #1 = 2.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 27 2004, 18:26 
Гость
Цитата:
Используешь нужный тебе, например:

Вот здорово!
Сначала используем SOLE для листания страницы, закрываем файл (точнее, сохраняем, чтоб сохранилось значение активной страницы в файле), а потом аплодим через ALSM_EXCEL_TO_INTERNAL_TABLE...
Но если я уже открыл файл с помощью OLE, то, конечно, буду использовать и дальше OLE-шные же методы загрузки
А вот обсуждаемый метод загрузки, через ALSM_EXCEL_TO_INTERNAL_TABLE как раз и не позволяет указывать активную страницу


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 28 2004, 05:26 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
ак написал(а):
Цитата:
Используешь нужный тебе, например:

А вот обсуждаемый метод загрузки, через ALSM_EXCEL_TO_INTERNAL_TABLE как раз и не позволяет указывать активную страницу

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 08 2006, 07:57 
Специалист
Специалист

Зарегистрирован:
Сб, май 14 2005, 20:46
Сообщения: 108
Откуда: Санкт-Петербург
здравствуйте!

Аналогичная ситуация: необходимо загружать данные из Excel файла
использую 'ALSM_EXCEL_TO_INTERNAL_TABLE'
(правда в дальнейшем буду модифицировать).
Но вот что не работает:
когда ставлю большой диапозон
I_BEGIN_COL = '1'
I_BEGIN_ROW = '1'
I_END_COL = '5'
I_END_ROW = '65000'

ФМ не загружает данные из Excel'я, делаю то же самое в отладке все работает. Остановиться в отладке надо между копированием
в буфер

* copy marked area (whole spread sheet) into Clippboard
CALL METHOD OF range 'COPY'.
m_message.

и импортом из буфера

CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data = excel_tab
EXCEPTIONS
cntl_error = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4
.

Поставил в этом месте задержку (цикл) все работает.
Кто нибудь сталкивался с подобным??
Заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: FUNCTION Z_EXCEL_LOAD
СообщениеДобавлено: Чт, июн 08 2006, 09:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Как то я писал модуль. В первой строке указываются имена полей внутренней таблицы, несовпадающие имена игнорируются. Выбор нужного листа легко дописать.
Code:
FUNCTION Z_EXCEL_LOAD.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(FILE_NAME) TYPE  RLGRAP-FILENAME
*"  TABLES
*"      IT_DATA
*"  EXCEPTIONS
*"      ERROR
*"----------------------------------------------------------------------

  Data:
    Begin of Char_Tab,
      X type X value '09',
    End of Char_Tab,
    App type OLE2_OBJECT,
    Wbs type OLE2_OBJECT,
    Wbk type OLE2_OBJECT,
    FileTxt type RLGRAP-FILENAME,
    it_StringData type standard table of String
      with header line,
    it_Header type standard table of String
      with header line,
    it_Line type standard table of String
      with header line,
    TempDir    type RLGRAP-FILENAME,
    Type_Fld,
    Error type sy-subrc.

  Field-symbols: <Fld>.

  CALL FUNCTION 'GUI_GET_DESKTOP_INFO'
       EXPORTING
            TYPE   = 4  "TmpDir
       CHANGING
            RETURN = TempDir.

  Concatenate TempDir '\' sy-repid '-' sy-TIMLO '.txt'
    into FileTxt.

  Create object App 'Excel.Application'.
  Set property of App 'DisplayAlerts' = 0.
  Call method of App 'Workbooks' = Wbs.
  Call method of Wbs 'Open'
    exporting #1 = File_Name.
  Call method of App 'ActiveWorkbook' = Wbk.
  Call method of Wbk 'SaveAs'
    exporting #1 = FileTxt
              #2 = -4158. "xlText
  Call method of App 'Quit'.
  Free object App.

  If sy-subrc = 0.
    Data: FileStr type string.
    FileStr = FileTxt.
    Call function 'GUI_UPLOAD'
         EXPORTING
              FILENAME = FileStr
         TABLES
              DATA_TAB = it_StringData
         EXCEPTIONS
              OTHERS   = 17.

    If sy-subrc = 0.
      Read table it_StringData index 1.
      If sy-subrc = 0.
        Split it_StringData at Char_Tab into table it_Header.

        Loop at it_StringData from 2.
          Split it_StringData at Char_Tab into table it_Line.

          Loop at it_Header.
            Assign component it_Header of structure it_Data to <Fld>.
            If sy-subrc = 0.
              Read table it_Line index sy-tabix.
              Describe field <Fld> type Type_Fld.
              If Type_Fld <> 'D'.
                <Fld> = it_Line.
              Else.
                Data: Day(2), Month(2), Year(4).
                Split it_Line at '/' into Month Day Year.
                <Fld>(4)   = Year.
                <Fld>+4(2) = Month.
                <Fld>+6(2) = Day.
              EndIf.
            EndIf.
          EndLoop.
          If not it_Data is initial.
            Append it_Data.
          EndIf.
        EndLoop.
      Else.
        Error = 2.
      EndIf.
    Else.
      Error = 1.
    EndIf.
  Else.
    Error = 1.
  EndIf.

  Call function 'GUI_DELETE_FILE'
       EXPORTING
            FILE_NAME = FileTxt
       EXCEPTIONS
            others    = 1.

  If Error <> 0.
    Raise Error.
  EndIf.

ENDFUNCTION.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FUNCTION Z_EXCEL_LOAD
СообщениеДобавлено: Ср, апр 23 2008, 10:13 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 07 2006, 09:49
Сообщения: 303
Parazit
Code:
              DESCRIBE FIELD <fld> TYPE type_fld.
              IF type_fld <> 'D'.
                <fld> = it_line.
              ELSE.
                Data: Day(2), Month(2), Year(4).
                Split it_Line at '/' into Month Day Year.
                <Fld>(4)   = Year.
                <Fld>+4(2) = Month.
                <Fld>+6(2) = Day.
              ENDIF.


Если дата 01.01.0001, то указанное разбиение не работает корректно.

Сделал так:
Code:
              DESCRIBE FIELD <fld> TYPE type_fld.
              IF type_fld <> 'D'.
                <fld> = it_line.
              ELSE.
                DATA: day(2), month(2), year(4).

                FIND '/' IN it_line.
                IF sy-subrc EQ 0.
                  SPLIT it_line AT '/' INTO month day year.
                ENDIF.

                FIND '.' IN it_line.
                IF sy-subrc EQ 0.
                  SPLIT it_line AT '.' INTO day month year.
                ENDIF.

                <fld>(4)   = year.
                <fld>+4(2) = month.
                <fld>+6(2) = day.

              ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 23 2008, 10:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
С некоторых пор MS (чтоб БГ пусто было) решила таки при сохранении XLS в текстовый файл использовать настройки разделителей, чего раньше не наблюдалось. Модуль пришлось изменить и написать еще один для получения параметров Excel:

Code:
FUNCTION Z_EXCEL_LOAD.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(FILE_NAME) TYPE  RLGRAP-FILENAME
*"     VALUE(SHEET_NAME) TYPE  CHAR30 OPTIONAL
*"     VALUE(HEADER_ROW) TYPE  SY-TABIX DEFAULT 1
*"     VALUE(DECIMAL_SEPARATOR) TYPE  CHAR1 DEFAULT ''
*"     VALUE(DATE_SEPARATOR) TYPE  CHAR1 DEFAULT ''
*"     VALUE(DATE_FORMAT) TYPE  CHAR10 DEFAULT ''
*"  TABLES
*"      IT_DATA
*"  EXCEPTIONS
*"      ERROR
*"----------------------------------------------------------------------

  Data:
    Char_Tab,
    X_Tab type X value '09',
    App type OLE2_OBJECT,
    Wbs type OLE2_OBJECT,
    Wbk type OLE2_OBJECT,
    Wsh type OLE2_OBJECT,
    FileTxt type RLGRAP-FILENAME,
    it_StringData type standard table of String
      with header line,
    it_Header type standard table of String
      with header line,
    it_Line type standard table of String
      with header line,
    TempDir    type RLGRAP-FILENAME,
    Type_Fld,
    NextRow type sy-tabix,
    Error type sy-subrc,
    Begin of Excel_Parameters,
     DECIMAL_SEPARATOR,
     DATE_SEPARATOR,
     DATE_FORMAT(10),
    End of Excel_Parameters,
    Date1(4),
    Date2(4),
    Date3(4),
    OLE_subrc type sy-subrc,
    CHAR_A value 'A',
    CHAR_B value 'B'.

  Field-symbols:
    <Fld>,
    <Day>,
    <Month>,
    <Year>.
  Field-symbols:
    <X>, <EI>.

*  Assign Char_Tab to <Fld> type 'X'.
*  <Fld> = X_Tab.

  Assign CHAR_A to <X>  type 'X'.
  Assign CHAR_B to <EI> type 'X'.
  <EI> = <EI> - <X>.
  Assign CHAR_TAB to <X> type 'X'.
  Clear <X>.
  <X> = X_TAB * <EI>.


  CALL FUNCTION 'GUI_GET_DESKTOP_INFO'
    EXPORTING
      TYPE   = 4  "TmpDir
    CHANGING
      RETURN = TempDir.

  Concatenate TempDir '\' sy-repid '-' sy-TIMLO '.txt'
    into FileTxt.

  Create object App 'Excel.Application'.
  Set property of App 'DisplayAlerts' = 0.
  Call method of App 'Workbooks' = Wbs.
  Call method of Wbs 'Open'
    EXPORTING
      #1 = File_Name.
  Call method of App 'ActiveWorkbook' = Wbk.
  If not SHEET_NAME is initial.
    Call method of Wbk 'WorkSheets' = Wsh
      EXPORTING
        #1 = SHEET_NAME.
    Call method of Wsh 'Select'.
  EndIf.
  Call method of Wbk 'SaveAs'
    EXPORTING
      #1  = FileTxt
      #2  = -4158 "xlText
      #3  = ''
      #4  = ''
      #5  = 0
      #6  = 0
      #7  = 0
      #8  = 0
      #9  = 0
      #10 = 0
      #11 = 0
      #12 = 1.
  Call method of App 'Quit'.
  OLE_subrc = sy-subrc.

  Free object: Wsh, Wbk, Wbs, App.

  If OLE_subrc = 0.
    Data: FileStr type string.
    FileStr = FileTxt.
    Call function 'GUI_UPLOAD'
      EXPORTING
        FILENAME = FileStr
      TABLES
        DATA_TAB = it_StringData
      EXCEPTIONS
        OTHERS   = 17.

    If sy-subrc = 0.
      Call function 'ZGET_EXCEL_PARAMETERS'
        IMPORTING
          DECIMAL_SEPARATOR = Excel_Parameters-DECIMAL_SEPARATOR
          DATE_SEPARATOR    = Excel_Parameters-DATE_SEPARATOR
          DATE_FORMAT       = Excel_Parameters-DATE_FORMAT.

      If DECIMAL_SEPARATOR is initial.
        DECIMAL_SEPARATOR = Excel_Parameters-DECIMAL_SEPARATOR.
      EndIf.

      If DATE_SEPARATOR is initial.
        DATE_SEPARATOR = Excel_Parameters-DATE_SEPARATOR.
      EndIf.

      If DATE_FORMAT is initial.
        DATE_FORMAT = Excel_Parameters-DATE_FORMAT.
      EndIf.

      Translate DATE_FORMAT to upper case.
      Split DATE_FORMAT at DATE_SEPARATOR into Date1 Date2 Date3.
      Case 'DD'.
        when Date1(2).
          Assign Date1 to <Day>.
        when Date2(2).
          Assign Date2 to <Day>.
        when Date3(2).
          Assign Date3 to <Day>.
      EndCase.

      Case 'MM'.
        when Date1(2).
          Assign Date1 to <Month>.
        when Date2(2).
          Assign Date2 to <Month>.
        when Date3(2).
          Assign Date3 to <Month>.
      EndCase.

      Case 'YY'.
        when Date1(2).
          Assign Date1 to <Year>.
        when Date2(2).
          Assign Date2 to <Year>.
        when Date3(2).
          Assign Date3 to <Year>.
      EndCase.

      Read table it_StringData index HEADER_ROW.
      If sy-subrc = 0.
        Split it_StringData at Char_Tab into table it_Header.

        NextRow = HEADER_ROW + 1.
        Loop at it_StringData from NextRow.
          Split it_StringData at Char_Tab into table it_Line.

          Clear it_Data.
          Loop at it_Header.
            Assign component it_Header of structure it_Data to <Fld>.
            If sy-subrc = 0.
              Read table it_Line index sy-tabix.
              If sy-subrc = 0.
                Describe field <Fld> type Type_Fld.
                Case Type_Fld.
                  when 'D'.
                    Data: Day(2), Month(2), Year(4).
                    Split it_Line at DATE_SEPARATOR into Date1 Date2 Date3.

                    If <Year> < 1900.
                      If <Year> > 53.
                        Concatenate '19' <Year> into <Year>.
                      Else.
                        Concatenate '20' <Year> into <Year>.
                      EndIf.
                    EndIf.

                    <Fld>(4)   = <Year>.
                    <Fld>+4(2) = <Month>.
                    <Fld>+6(2) = <Day>.
                  when 'P'.
                    Replace DECIMAL_SEPARATOR with '.' into it_Line.
                    <Fld> = it_Line.
                  when others.
                    Perform PrepareString using it_Line.
                    <Fld> = it_Line.
                EndCase.
              EndIf.
            EndIf.
          EndLoop.
          If not it_Data is initial.
            Append it_Data.
          EndIf.
        EndLoop.
      Else.
        Error = 2.
      EndIf.
    Else.
      Error = 1.
    EndIf.
  Else.
    Error = 1.
  EndIf.

  Call function 'GUI_DELETE_FILE'
    EXPORTING
      FILE_NAME = FileTxt
    EXCEPTIONS
      others    = 1.

  If Error <> 0.
    Raise Error.
  EndIf.

ENDFUNCTION.


Code:
FUNCTION ZGET_EXCEL_PARAMETERS.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  EXPORTING
*"     REFERENCE(DECIMAL_SEPARATOR) TYPE  CHAR1
*"     REFERENCE(DATE_SEPARATOR) TYPE  CHAR1
*"     REFERENCE(DATE_FORMAT)
*"----------------------------------------------------------------------


  Perform AssignCharX.

  PERFORM GET_EXCEL_DECIMAL_SEPARATOR
    USING DECIMAL_SEPARATOR.

  Perform GET_SYSTEM_DATE_SEPARATOR
    USING DATE_SEPARATOR.

  Perform GET_SYSTEM_DATE_FORMAT
    USING DATE_FORMAT.

ENDFUNCTION.


Code:
Constants:
  X_TAB(1) TYPE X VALUE '09',
  X_0D(1)  TYPE X VALUE '0D',
  X_0A(1)  TYPE X VALUE '0A'.

DATA:
  CHAR_TAB type C,
  CHAR_0D  TYPE C,
  CHAR_0A  TYPE C,

  DECIMAL_POINT.

FORM AssignCharX .
  Data: L type i,
        CHAR_A value 'A',
        CHAR_B value 'B'.
  Field-symbols:
    <X>, <EI>.

  Assign CHAR_A to <X>  type 'X'.
  Assign CHAR_B to <EI> type 'X'.
  <EI> = <EI> - <X>.

  Assign CHAR_TAB to <X> type 'X'.
  Clear <X>.
  <X> = X_TAB * <EI>.
  Assign CHAR_0D to <X> type 'X'.
  Clear <X>.
  <X> = X_0D * <EI>.
  Assign CHAR_0A to <X> type 'X'.
  Clear <X>.
  <X> = X_0A * <EI>.
ENDFORM.                    " AssignCharX

FORM GET_EXCEL_DECIMAL_SEPARATOR
  USING RESULT.

  DATA:
    APP TYPE OLE2_OBJECT,
    USESYSTEMSEPARATORS(10).

  CREATE OBJECT APP 'Excel.Application'.
  IF SY-SUBRC = 0.
    GET PROPERTY OF APP
      'UseSystemSeparators' = USESYSTEMSEPARATORS.
    CALL FUNCTION 'FLUSH'.

    IF SY-SUBRC <> 0 OR
     ( SY-SUBRC = 0 AND USESYSTEMSEPARATORS <> 0 ).

      PERFORM GET_SYSTEM_DECIMAL_SEPARATOR
        USING RESULT.
    ELSE.
      GET PROPERTY OF APP
        'DecimalSeparator' = RESULT.
      CALL FUNCTION 'FLUSH'.
    ENDIF.

    FREE OBJECT APP.
    CALL FUNCTION 'FLUSH'.
  ENDIF.
ENDFORM.                    "GET_EXCEL_DECIMAL_SEPARATOR

FORM GET_SYSTEM_DECIMAL_SEPARATOR
  USING RESULT.

  DATA:
    HKEY_CURRENT_USER TYPE I VALUE 1.

  CALL FUNCTION 'GUI_GET_REGVALUE'
    EXPORTING
      ROOT           = HKEY_CURRENT_USER
      KEY            = 'Control Panel\International'
      VALUE_NAME     = 'sDecimal'
    CHANGING
      STRING         = RESULT
    EXCEPTIONS
      REGISTRY_ERROR = 1.
ENDFORM.                    "GET_SYSTEM_DECIMAL_SEPARATOR

FORM GET_SYSTEM_DATE_SEPARATOR
  USING RESULT.

  DATA:
    HKEY_CURRENT_USER TYPE I VALUE 1.

  CALL FUNCTION 'GUI_GET_REGVALUE'
    EXPORTING
      ROOT           = HKEY_CURRENT_USER
      KEY            = 'Control Panel\International'
      VALUE_NAME     = 'sDate'
    CHANGING
      STRING         = RESULT
    EXCEPTIONS
      REGISTRY_ERROR = 1.
ENDFORM.                    "GET_SYSTEM_DATE_SEPARATOR

FORM GET_SYSTEM_DATE_FORMAT
  USING RESULT.

  DATA:
    HKEY_CURRENT_USER TYPE I VALUE 1.

  CALL FUNCTION 'GUI_GET_REGVALUE'
    EXPORTING
      ROOT           = HKEY_CURRENT_USER
      KEY            = 'Control Panel\International'
      VALUE_NAME     = 'sShortDate'
    CHANGING
      STRING         = RESULT
    EXCEPTIONS
      REGISTRY_ERROR = 1.
ENDFORM.                    "GET_SYSTEM_DATE_FORMAT

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 23 2008, 11:14 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 07 2006, 09:49
Сообщения: 303
В том-то и дело, что в текстовом файле дата сохраняется по-разному для 01.01.0001 и 18.04.2008. Даты в разных полях одной строки. Тип в экселе для них обоих — Дата.

...

P.S.
Если поставить для всех ячеек текстовый формат в экселе, то разделителями являются точки (для формата 01.01.0001, и 18.04.2008). Тогда можно обойтись без узнавания данных из реестра. Все равно, допустим, у меня sDate = ".", но данные для ячеек типа "Дата" все равно сохраняются в текстовом файле с разделителем "/".


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

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


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

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


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

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