SAPфорум.RU https://sapboard.ru/forum/ |
|
Перенос данных Excel => SAP https://sapboard.ru/forum/viewtopic.php?f=13&t=7143 |
Страница 1 из 2 |
Автор: | lumer [ Пн, авг 08 2005, 07:24 ] |
Заголовок сообщения: | Перенос данных Excel => SAP |
Задача: пришел файл в Excel. Надо его 1 в 1 перенести в R/3-таблицу. Эдак под 1000 строк. Писать ради каждого такого случая скрипт как-то нелепо. Есть ли стандартные средства переноса через буфер обмена или через какой-нибудь CSV/DBF? |
Автор: | Clarus [ Пн, авг 08 2005, 09:00 ] |
Заголовок сообщения: | |
В принципе, можно написать универсальный скрипт. Поищи варианты использования field-symbols на форуме, станет все понятно, я полагаю. |
Автор: | РМщик [ Пн, авг 08 2005, 10:18 ] |
Заголовок сообщения: | |
есть еще функция ALSM_EXCEL_TO_INTERNAL_TABLE |
Автор: | Гость [ Чт, авг 11 2005, 10:58 ] |
Заголовок сообщения: | |
РМщик написал(а): есть еще функция ALSM_EXCEL_TO_INTERNAL_TABLE
А можно привести исходный код этого ФМ. У нас 4.0В, там такого ФМ нет. Заранее благодарен. |
Автор: | РМщик [ Чт, авг 11 2005, 13:36 ] |
Заголовок сообщения: | |
Code: FUNCTION alsm_excel_to_internal_table .
*"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(FILENAME) LIKE RLGRAP-FILENAME *" VALUE(I_BEGIN_COL) TYPE I *" VALUE(I_BEGIN_ROW) TYPE I *" VALUE(I_END_COL) TYPE I *" VALUE(I_END_ROW) TYPE I *" TABLES *" INTERN STRUCTURE ALSMEX_TABLINE *" EXCEPTIONS *" INCONSISTENT_PARAMETERS *" UPLOAD_OLE *"---------------------------------------------------------------------- DATA: excel_tab TYPE ty_t_sender. DATA: ld_separator TYPE c. DATA: application TYPE ole2_object, workbook TYPE ole2_object, range TYPE ole2_object, worksheet TYPE ole2_object. DATA: h_cell TYPE ole2_object, h_cell1 TYPE ole2_object. DATA: ld_rc TYPE i. * Rќckgabewert der Methode "clipboard_export " * Makro fќr Fehlerbehandlung der Methods DEFINE m_message. case sy-subrc. when 0. when 1. message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. when others. raise upload_ole. endcase. END-OF-DEFINITION. * check parameters IF i_begin_row > i_end_row. RAISE inconsistent_parameters. ENDIF. IF i_begin_col > i_end_col. RAISE inconsistent_parameters. ENDIF. * Get TAB-sign for separation of fields CLASS cl_abap_char_utilities DEFINITION LOAD. ld_separator = cl_abap_char_utilities=>horizontal_tab. * open file in Excel IF application-header = space OR application-handle = -1. CREATE OBJECT application 'Excel.Application'. m_message. ENDIF. CALL METHOD OF application 'Workbooks' = workbook. m_message. CALL METHOD OF workbook 'Open' EXPORTING #1 = filename. m_message. * set property of application 'Visible' = 1. * m_message. GET PROPERTY OF application 'ACTIVESHEET' = worksheet. m_message. * mark whole spread sheet CALL METHOD OF worksheet 'Cells' = h_cell EXPORTING #1 = i_begin_row #2 = i_begin_col. m_message. CALL METHOD OF worksheet 'Cells' = h_cell1 EXPORTING #1 = i_end_row #2 = i_end_col. m_message. CALL METHOD OF worksheet 'RANGE' = range EXPORTING #1 = h_cell #2 = h_cell1. m_message. CALL METHOD OF range 'SELECT'. m_message. * copy marked area (whole spread sheet) into Clippboard CALL METHOD OF range 'COPY'. m_message. * read clipboard into ABAP 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 . IF sy-subrc <> 0. MESSAGE a037(alsmex). ENDIF. PERFORM separated_to_intern_convert TABLES excel_tab intern USING ld_separator. * clear clipboard REFRESH excel_tab. CALL METHOD cl_gui_frontend_services=>clipboard_export IMPORTING data = excel_tab CHANGING rc = ld_rc EXCEPTIONS cntl_error = 1 * ERROR_NO_GUI = 2 * NOT_SUPPORTED_BY_GUI = 3 OTHERS = 4 . * quit Excel and free ABAP Object - unfortunately, this does not kill * the Excel process CALL METHOD OF application 'QUIT'. m_message. * >>>>> Begin of change note 575877 * to kill the Excel process it's necessary to free all used objects FREE OBJECT h_cell. m_message. FREE OBJECT h_cell1. m_message. FREE OBJECT range. m_message. FREE OBJECT worksheet. m_message. FREE OBJECT workbook. m_message. FREE OBJECT application. m_message. * <<<<< End of change note 575877 ENDFUNCTION. FORM separated_to_intern_convert TABLES i_tab TYPE ty_t_sender i_intern TYPE ty_t_itab USING i_separator TYPE c. DATA: l_sic_tabix LIKE sy-tabix, l_sic_col TYPE kcd_ex_col. DATA: l_fdpos LIKE sy-fdpos. REFRESH i_intern. LOOP AT i_tab. l_sic_tabix = sy-tabix. l_sic_col = 0. WHILE i_tab CA i_separator. l_fdpos = sy-fdpos. l_sic_col = l_sic_col + 1. PERFORM line_to_cell_separat TABLES i_intern USING i_tab l_sic_tabix l_sic_col i_separator l_fdpos. ENDWHILE. IF i_tab <> space. CLEAR i_intern. i_intern-row = l_sic_tabix. i_intern-col = l_sic_col + 1. i_intern-value = i_tab. APPEND i_intern. ENDIF. ENDLOOP. ENDFORM. " SEPARATED_TO_INTERN_CONVERT *---------------------------------------------------------------------* FORM line_to_cell_separat TABLES i_intern TYPE ty_t_itab USING i_line i_row LIKE sy-tabix ch_cell_col TYPE kcd_ex_col i_separator TYPE c i_fdpos LIKE sy-fdpos. DATA: l_string TYPE ty_s_senderline. DATA l_sic_int TYPE i. CLEAR i_intern. l_sic_int = i_fdpos. i_intern-row = i_row. l_string = i_line. i_intern-col = ch_cell_col. * csv Dateien mit separator in Zelle: --> ;"abc;cd"; IF ( i_separator = ';' OR i_separator = ',' ) AND l_string(1) = gc_esc. PERFORM line_to_cell_esc_sep USING l_string l_sic_int i_separator i_intern-value. ELSE. IF l_sic_int > 0. i_intern-value = i_line(l_sic_int). ENDIF. ENDIF. IF l_sic_int > 0. APPEND i_intern. ENDIF. l_sic_int = l_sic_int + 1. i_line = i_line+l_sic_int. ENDFORM. *---------------------------------------------------------------------* FORM line_to_cell_esc_sep USING i_string i_sic_int TYPE i i_separator TYPE c i_intern_value TYPE ty_d_itabvalue. DATA: l_int TYPE i, l_cell_end(2). FIELD-SYMBOLS: <l_cell>. l_cell_end = gc_esc. l_cell_end+1 = i_separator . IF i_string CS gc_esc. i_string = i_string+1. IF i_string CS l_cell_end. l_int = sy-fdpos. ASSIGN i_string(l_int) TO <l_cell>. i_intern_value = <l_cell>. l_int = l_int + 2. i_sic_int = l_int. i_string = i_string+l_int. ELSEIF i_string CS gc_esc. * letzte Celle l_int = sy-fdpos. ASSIGN i_string(l_int) TO <l_cell>. i_intern_value = <l_cell>. l_int = l_int + 1. i_sic_int = l_int. i_string = i_string+l_int. l_int = strlen( i_string ). IF l_int > 0 . MESSAGE x001(kx) . ENDIF. ELSE. MESSAGE x001(kx) . "was ist mit csv-Format ENDIF. ENDIF. ENDFORM. |
Автор: | Гость [ Чт, авг 11 2005, 15:15 ] |
Заголовок сообщения: | |
Пишет: The type "TY_T_SENDER" is unknown. Как его описать? |
Автор: | Гость [ Чт, авг 11 2005, 15:29 ] |
Заголовок сообщения: | |
Как описать структуру - ALSMEX_TABLINE? |
Автор: | РМщик [ Чт, авг 11 2005, 15:37 ] |
Заголовок сообщения: | |
Code: TYPE-POOLS: ole2.
* value of excel-cell TYPES: ty_d_itabvalue TYPE alsmex_tabline-value, * internal table containing the excel data ty_t_itab TYPE alsmex_tabline OCCURS 0, * line type of sender table BEGIN OF ty_s_senderline, line(4096) TYPE c, END OF ty_s_senderline, * sender table ty_t_sender TYPE ty_s_senderline OCCURS 0. * CONSTANTS: gc_esc VALUE '"'. еще создай в словере: структуру alsmex_tabline : ROW NUMC 4 COL NUMC 4 VALUE CHAR50 (например, но можно и больше) |
Автор: | Гость [ Чт, авг 11 2005, 16:26 ] |
Заголовок сообщения: | |
Пишет: Incorrect nesting: Before the statement "CLASS", the structure introduced by "FUNCTION" must be concluded by "ENDFUNCTION". - Указывает на строку: class cl_abap_char_utilities definition load. Может быть нужно описать этот класс? А не могли бы вы выгрузить эту функцию и выложить файлы транспорта? |
Автор: | РМщик [ Чт, авг 11 2005, 16:41 ] |
Заголовок сообщения: | |
если нет класса - транспорт не поможет, попробуй вместо строк: Code: CLASS cl_abap_char_utilities DEFINITION LOAD. ld_separator = cl_abap_char_utilities=>horizontal_tab. поставить: Code: CONSTANTS: gc_hex_tab TYPE x VALUE 09.
FIELD-SYMBOLS: <field>. ASSIGN ld_separator TO <field> TYPE 'X'. <field> = gc_hex_tab. |
Автор: | Гость [ Пт, авг 12 2005, 07:41 ] |
Заголовок сообщения: | |
РМщик написал(а): если нет класса - транспорт не поможет,
попробуй вместо строк: Code: CLASS cl_abap_char_utilities DEFINITION LOAD. ld_separator = cl_abap_char_utilities=>horizontal_tab. поставить: Code: CONSTANTS: gc_hex_tab TYPE x VALUE 09. FIELD-SYMBOLS: <field>. ASSIGN ld_separator TO <field> TYPE 'X'. <field> = gc_hex_tab. Это не помогло. Ну да ладно. Всем большое спасибо. |
Автор: | Гость [ Пт, авг 12 2005, 07:41 ] |
Заголовок сообщения: | |
РМщик написал(а): если нет класса - транспорт не поможет,
попробуй вместо строк: Code: CLASS cl_abap_char_utilities DEFINITION LOAD. ld_separator = cl_abap_char_utilities=>horizontal_tab. поставить: Code: CONSTANTS: gc_hex_tab TYPE x VALUE 09. FIELD-SYMBOLS: <field>. ASSIGN ld_separator TO <field> TYPE 'X'. <field> = gc_hex_tab. Это не помогло. Ну да ладно. Всем большое спасибо. |
Автор: | Гость [ Ср, авг 31 2005, 11:56 ] |
Заголовок сообщения: | |
Возможно подойтет просто SCAT |
Автор: | Vova_fighter [ Пн, дек 26 2005, 13:05 ] |
Заголовок сообщения: | |
У меня есть для тебя решение, если еще раз такой файлик придет |
Автор: | Igor_Beruk [ Ср, сен 12 2018, 16:54 ] |
Заголовок сообщения: | Re: Перенос данных Excel => SAP |
Здравствуйте,коллеги! Может кто поможет или подскажет,может кто сталкивался. Такая ситуация. Есть csv файл,в самих полях которого могут присутствовать ';' - при считывании во внутреннюю таблицу стандартными ФМ происходит неверная интерпритация из-за этого. Как это обойти? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |