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

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


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

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


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

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