- REPORT ZINI_02.
- PARAMETERS : P_FILE(100) DEFAULT 'M:\Estructura Tablas v2.xlsx' LOWER CASE,
- P_TAB TYPE TABNAME OBLIGATORY DEFAULT 'ZAG3_TDM2',
- P_TEST AS CHECKBOX DEFAULT 'X'.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ NOTAS
- *--[
- *--[ El XLS puede tener multiples pestanyas, pero la pestanya con
- *--[ los datos, debe contener el nombre de la tabla o solo una
- *--[ unica pestanya.
- *--[
- *--[ El XLS debe tener la primera linea de cabecera que sera
- *--[ ignorada
- *--[
- CLASS ZINI_CL_UPLOAD_2_TAB DEFINITION.
- PUBLIC SECTION.
- METHODS: CONSTRUCTOR IMPORTING P_FILE TYPE STRING
- P_TAB TYPE TABNAME
- P_TEST TYPE XFELD OPTIONAL,
- DATA_LOADSAVE.
- PRIVATE SECTION.
- DATA: G_FILE TYPE STRING,
- G_TAB TYPE TABNAME,
- G_TEST TYPE XFELD.
- ENDCLASS.
- CLASS ZINI_CL_UPLOAD_2_TAB IMPLEMENTATION.
- METHOD CONSTRUCTOR.
- G_FILE = P_FILE.
- G_TAB = P_TAB.
- G_TEST = abap_true.
- if p_test is SUPPLIED.
- g_test = P_TEST.
- endif.
- ENDMETHOD.
- METHOD DATA_LOADSAVE.
- FIELD-SYMBOLS: <GT_DATA> TYPE STANDARD TABLE.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Lectura del XLS
- DATA : LV_FILENAME TYPE STRING,
- LT_RECORDS TYPE SOLIX_TAB,
- LV_HEADERXSTRING TYPE XSTRING,
- LV_FILELENGTH TYPE I,
- FT TYPE FILETABLE.
- IF G_FILE IS INITIAL.
- CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
- EXPORTING
- WINDOW_TITLE = 'Selecciona un fichero'
- MULTISELECTION = ABAP_FALSE
- CHANGING
- FILE_TABLE = FT
- RC = LV_FILELENGTH
- * USER_ACTION =
- * FILE_ENCODING =
- EXCEPTIONS
- FILE_OPEN_DIALOG_FAILED = 1
- CNTL_ERROR = 2
- ERROR_NO_GUI = 3
- NOT_SUPPORTED_BY_GUI = 4
- OTHERS = 5.
- IF SY-SUBRC EQ 0 AND LINES( FT ) = 1.
- * Implement suitable error handling here
- G_FILE = FT[ 1 ]-FILENAME.
- ELSE.
- EXIT.
- ENDIF.
- ENDIF.
- CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
- EXPORTING
- FILENAME = G_FILE
- FILETYPE = 'BIN'
- IMPORTING
- FILELENGTH = LV_FILELENGTH
- HEADER = LV_HEADERXSTRING
- CHANGING
- DATA_TAB = LT_RECORDS
- * ISSCANPERFORMED = SPACE
- EXCEPTIONS
- FILE_OPEN_ERROR = 1
- FILE_READ_ERROR = 2
- NO_BATCH = 3
- GUI_REFUSE_FILETRANSFER = 4
- INVALID_TYPE = 5
- NO_AUTHORITY = 6
- UNKNOWN_ERROR = 7
- BAD_DATA_FORMAT = 8
- HEADER_NOT_ALLOWED = 9
- SEPARATOR_NOT_ALLOWED = 10
- HEADER_TOO_LONG = 11
- UNKNOWN_DP_ERROR = 12
- ACCESS_DENIED = 13
- DP_OUT_OF_MEMORY = 14
- DISK_FULL = 15
- DP_TIMEOUT = 16
- NOT_SUPPORTED_BY_GUI = 17
- ERROR_NO_GUI = 18
- OTHERS = 19.
- CHECK SY-SUBRC EQ 0 .
- CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
- EXPORTING
- INPUT_LENGTH = LV_FILELENGTH
- IMPORTING
- BUFFER = LV_HEADERXSTRING
- TABLES
- BINARY_TAB = LT_RECORDS
- EXCEPTIONS
- FAILED = 1
- OTHERS = 2.
- CHECK SY-SUBRC EQ 0.
- DATA : LO_EXCEL_REF TYPE REF TO CL_FDT_XL_SPREADSHEET .
- TRY .
- LO_EXCEL_REF = NEW CL_FDT_XL_SPREADSHEET(
- DOCUMENT_NAME = LV_FILENAME
- XDOCUMENT = LV_HEADERXSTRING ) .
- CATCH CX_FDT_EXCEL_CORE.
- "Implement suitable error handling here
- ENDTRY .
- "Get List of Worksheets
- LO_EXCEL_REF->IF_FDT_DOC_SPREADSHEET~GET_WORKSHEET_NAMES(
- IMPORTING
- WORKSHEET_NAMES = DATA(LT_WORKSHEETS) ).
- CHECK NOT LT_WORKSHEETS IS INITIAL.
- LOOP AT LT_WORKSHEETS INTO DATA(LV_WOKSHEETNAME).
- IF LINES( LT_WORKSHEETS ) NE 1.
- CHECK LV_WOKSHEETNAME CS P_TAB.
- ENDIF.
- DATA(LO_DATA_REF) = LO_EXCEL_REF->IF_FDT_DOC_SPREADSHEET~GET_ITAB_FROM_WORKSHEET(
- LV_WOKSHEETNAME ).
- "now you have excel work sheet data in dyanmic internal table
- ASSIGN LO_DATA_REF->* TO <GT_DATA>.
- EXIT.
- ENDLOOP.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ DATA_LOAD
- DATA : LV_NUMBEROFCOLUMNS TYPE I,
- TABLE TYPE REF TO DATA.
- FIELD-SYMBOLS: <PT> TYPE STANDARD TABLE,
- <PL> TYPE ANY.
- DATA(STRUCT_DESC) = CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_NAME( G_TAB ).
- DATA(TABLE_DESC) = CL_ABAP_TABLEDESCR=>CREATE(
- P_LINE_TYPE = CAST #( STRUCT_DESC )
- P_TABLE_KIND = CL_ABAP_TABLEDESCR=>TABLEKIND_STD
- P_UNIQUE = ABAP_FALSE
- ).
- CREATE DATA TABLE TYPE HANDLE TABLE_DESC.
- ASSIGN TABLE->* TO <PT>.
- LOOP AT <GT_DATA> ASSIGNING FIELD-SYMBOL(<LS_DATA>).
- AT FIRST.
- SELECT * FROM DD03L INTO TABLE @DATA(T_DIC) WHERE TABNAME = @G_TAB AND
- FIELDNAME NE 'MANDT' AND
- FIELDNAME NOT LIKE '%INCLUDE'.
- ENDAT.
- DATA(L_TABIX) = SY-TABIX.
- IF SY-TABIX EQ 1. CONTINUE. ENDIF.
- LV_NUMBEROFCOLUMNS = LINES( T_DIC ) - 1.
- APPEND INITIAL LINE TO <PT> ASSIGNING FIELD-SYMBOL(<PS>).
- DO LV_NUMBEROFCOLUMNS TIMES.
- ASSIGN COMPONENT SY-INDEX OF STRUCTURE <LS_DATA> TO FIELD-SYMBOL(<LV_FIELD>) .
- IF SY-SUBRC = 0 .
- DATA(L_FIELD) = T_DIC[ SY-INDEX ]-FIELDNAME.
- DATA(L_F) = |<ps>-{ L_FIELD }|.
- ASSIGN (L_F) TO FIELD-SYMBOL(<F>).
- <F> = <LV_FIELD>.
- ELSE.
- EXIT. "<-- Bye Bye Bye
- ENDIF.
- ENDDO .
- AT LAST.
- IF LINES( <PT> ) >= 1.
- IF G_TEST IS INITIAL.
- MODIFY (G_TAB) FROM TABLE <PT>.
- MESSAGE S398(00) WITH 'Tabla' P_TAB 'actualizada' ''.
- ELSE.
- ENDIF.
- ELSE.
- MESSAGE E398(00) WITH 'No hay registros para' P_TAB '' ''.
- ENDIF.
- ENDAT.
- ENDLOOP.
- ENDMETHOD.
- ENDCLASS.
- END-OF-SELECTION.
- DATA(L_XLS) = NEW ZINI_CL_UPLOAD_2_TAB( P_FILE = CONV STRING( P_FILE )
- P_TAB = CONV TABNAME( P_TAB )
- ).
- L_XLS->DATA_LOADSAVE( ).
Última modificación de la página el 20 January 2025 a las 14h29
Powered by
PmWiki