mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-04 20:28:22 +08:00
Add ability to generate report from template (#669)
write tool to automate abap2xlsx fix merged cells code style Convert keyword to UPPER case adapt code to 702 New proposal fix of Lint errors Co-authored-by: sandraros <34005250+sandraros@users.noreply.github.com> Co-authored-by: Abo <andrea@borgia.bo.it>
This commit is contained in:
parent
6d12c57f27
commit
dc3962a402
353
src/demos/zdemo_excel_fill_template.prog.abap
Normal file
353
src/demos/zdemo_excel_fill_template.prog.abap
Normal file
|
@ -0,0 +1,353 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Report Fill Template
|
||||
*&
|
||||
*&---------------------------------------------------------------------*
|
||||
*&
|
||||
*&
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
REPORT zdemo_excel_fill_template.
|
||||
|
||||
*=================
|
||||
* Start of generated code.
|
||||
* All these types were generated
|
||||
* by ZEXCEL_TEMPLATE_GET_TYPES based
|
||||
* on the Excel file ZDEMO_EXCEL_TEMPLATE
|
||||
* from SMW0.
|
||||
*=================
|
||||
TYPES t_number TYPE p length 16 decimals 4.
|
||||
TYPES:
|
||||
begin of t_TABLE1,
|
||||
PERSON type string,
|
||||
SALARY type t_number,
|
||||
end of t_TABLE1,
|
||||
|
||||
tt_TABLE1 type standard table of t_TABLE1 with default key,
|
||||
|
||||
begin of t_LINE1,
|
||||
CARRID type string,
|
||||
CONNID type string,
|
||||
FLDATE type d,
|
||||
PRICE type t_number,
|
||||
end of t_LINE1,
|
||||
|
||||
tt_LINE1 type standard table of t_LINE1 with default key,
|
||||
|
||||
begin of t_TABLE2,
|
||||
CARRID type string,
|
||||
PRICE type t_number,
|
||||
LINE1 type tt_LINE1,
|
||||
end of t_TABLE2,
|
||||
|
||||
tt_TABLE2 type standard table of t_TABLE2 with default key,
|
||||
|
||||
begin of t_Sheet1,
|
||||
DATE type d,
|
||||
TIME type t,
|
||||
USER type string,
|
||||
TOTAL type t_number,
|
||||
PRICE type t_number,
|
||||
TABLE1 type tt_TABLE1,
|
||||
TABLE2 type tt_TABLE2,
|
||||
end of t_Sheet1,
|
||||
|
||||
|
||||
begin of t_TABLE3,
|
||||
PERSON type string,
|
||||
SALARY type t_number,
|
||||
end of t_TABLE3,
|
||||
|
||||
tt_TABLE3 type standard table of t_TABLE3 with default key,
|
||||
|
||||
begin of t_Sheet2,
|
||||
DATE type d,
|
||||
TIME type t,
|
||||
USER type string,
|
||||
TOTAL type t_number,
|
||||
TABLE3 type tt_TABLE3,
|
||||
end of t_Sheet2.
|
||||
|
||||
|
||||
DATA: lo_data type ref to ZCL_EXCEL_TEMPLATE_DATA.
|
||||
*=================
|
||||
* End of generated code
|
||||
*=================
|
||||
|
||||
* define variables
|
||||
DATA: gs_sheet1 TYPE t_sheet1,
|
||||
gs_sheet2 TYPE t_sheet2.
|
||||
|
||||
TABLES: sscrfields.
|
||||
|
||||
CONSTANTS: gc_save_file_name TYPE string VALUE 'fill_template.xlsx'.
|
||||
INCLUDE zdemo_excel_outputopt_incl.
|
||||
|
||||
PARAMETERS: p_smw0 RADIOBUTTON GROUP rad1 DEFAULT 'X'.
|
||||
PARAMETERS: p_objid TYPE w3objid OBLIGATORY DEFAULT 'ZDEMO_EXCEL_TEMPLATE'.
|
||||
|
||||
PARAMETERS: p_file RADIOBUTTON GROUP rad1.
|
||||
PARAMETERS: p_fpath TYPE string OBLIGATORY LOWER CASE DEFAULT 'c:\temp\whatever.xlsx'.
|
||||
|
||||
SELECTION-SCREEN SKIP 1.
|
||||
|
||||
SELECTION-SCREEN PUSHBUTTON /1(45) but_txt USER-COMMAND get_types.
|
||||
|
||||
|
||||
INITIALIZATION.
|
||||
but_txt = '@BY@ Analyze file to propose TYPES'.
|
||||
|
||||
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.
|
||||
PERFORM get_file_path CHANGING p_fpath.
|
||||
|
||||
AT SELECTION-SCREEN.
|
||||
CASE sscrfields-ucomm.
|
||||
WHEN 'GET_TYPES'.
|
||||
SUBMIT zexcel_template_get_types
|
||||
WITH p_smw0 = p_smw0
|
||||
WITH p_objid = p_objid
|
||||
WITH p_file = p_file
|
||||
WITH p_fpath = p_fpath
|
||||
AND RETURN.
|
||||
ENDCASE.
|
||||
|
||||
START-OF-SELECTION.
|
||||
PERFORM load_data.
|
||||
PERFORM generate_file.
|
||||
|
||||
FORM load_data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_table1> TYPE t_table1,
|
||||
<ls_line> TYPE t_line1,
|
||||
<lt_table2> TYPE t_table2.
|
||||
|
||||
gs_sheet1-date = sy-datum.
|
||||
gs_sheet1-time = sy-uzeit.
|
||||
gs_sheet1-user = sy-uname.
|
||||
gs_sheet1-total = 5600.
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table1 ASSIGNING <ls_table1>.
|
||||
<ls_table1>-person = 'Lurch Schpellchek'.
|
||||
<ls_table1>-salary = 1200.
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table1 ASSIGNING <ls_table1>.
|
||||
<ls_table1>-person = 'Russell Sprout'.
|
||||
<ls_table1>-salary = 1300.
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table1 ASSIGNING <ls_table1>.
|
||||
<ls_table1>-person = 'Fergus Douchebag'.
|
||||
<ls_table1>-salary = 3000.
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table1 ASSIGNING <ls_table1>.
|
||||
<ls_table1>-person = 'Bartholomew Shoe'.
|
||||
<ls_table1>-salary = 100.
|
||||
|
||||
|
||||
gs_sheet1-price = 14003.
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table2 ASSIGNING <lt_table2>.
|
||||
<lt_table2>-carrid = 'AC'.
|
||||
<lt_table2>-price = 1222.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'AC'.
|
||||
<ls_line>-connid = '0820'.
|
||||
<ls_line>-fldate = '20021220'.
|
||||
<ls_line>-price = 1222.
|
||||
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table2 ASSIGNING <lt_table2>.
|
||||
<lt_table2>-carrid = 'AF'.
|
||||
<lt_table2>-price = 2222.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'AF'.
|
||||
<ls_line>-connid = '0820'.
|
||||
<ls_line>-fldate = '20021223'.
|
||||
<ls_line>-price = 2222.
|
||||
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table2 ASSIGNING <lt_table2>.
|
||||
<lt_table2>-carrid = 'LH'.
|
||||
<lt_table2>-price = 9488.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'LH'.
|
||||
<ls_line>-connid = '0400'.
|
||||
<ls_line>-fldate = '19950228'.
|
||||
<ls_line>-price = 899.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'LH'.
|
||||
<ls_line>-connid = '0400'.
|
||||
<ls_line>-fldate = '19951117'.
|
||||
<ls_line>-price = 1499.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'LH'.
|
||||
<ls_line>-connid = '0400'.
|
||||
<ls_line>-fldate = '19950606'.
|
||||
<ls_line>-price = 1090.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'LH'.
|
||||
<ls_line>-connid = '0400'.
|
||||
<ls_line>-fldate = '19950428'.
|
||||
<ls_line>-price = 6000.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'LH'.
|
||||
<ls_line>-connid = '0400'.
|
||||
<ls_line>-fldate = '20021221'.
|
||||
<ls_line>-price = 222.
|
||||
|
||||
APPEND INITIAL LINE TO gs_sheet1-table2 ASSIGNING <lt_table2>.
|
||||
<lt_table2>-carrid = 'SQ'.
|
||||
<lt_table2>-price = 849.
|
||||
|
||||
APPEND INITIAL LINE TO <lt_table2>-line1 ASSIGNING <ls_line>.
|
||||
<ls_line>-carrid = 'SQ'.
|
||||
<ls_line>-connid = '0026'.
|
||||
<ls_line>-fldate = '19950228'.
|
||||
<ls_line>-price = 849.
|
||||
|
||||
|
||||
MOVE-CORRESPONDING gs_sheet1 TO gs_sheet2.
|
||||
gs_sheet2-table3 = gs_sheet1-table1.
|
||||
|
||||
ENDFORM.
|
||||
|
||||
FORM generate_file.
|
||||
|
||||
DATA: lo_excel TYPE REF TO zcl_excel,
|
||||
lo_reader TYPE REF TO zif_excel_reader,
|
||||
lo_root TYPE REF TO cx_root.
|
||||
|
||||
TRY.
|
||||
|
||||
* prepare data
|
||||
CREATE OBJECT lo_data.
|
||||
lo_data->add( iv_sheet = 'Sheet1' iv_data = gs_sheet1 ).
|
||||
lo_data->add( iv_sheet = 'Sheet2' iv_data = gs_sheet2 ).
|
||||
|
||||
* create reader
|
||||
CREATE OBJECT lo_reader TYPE zcl_excel_reader_2007.
|
||||
|
||||
* load template
|
||||
IF p_file IS NOT INITIAL.
|
||||
lo_excel = lo_reader->load_file( p_fpath ).
|
||||
ELSE.
|
||||
PERFORM load_smw0 USING lo_reader p_objid CHANGING lo_excel.
|
||||
ENDIF.
|
||||
|
||||
* merge data with template
|
||||
lo_excel->fill_template( lo_data ).
|
||||
|
||||
|
||||
*** Create output
|
||||
lcl_output=>output( lo_excel ).
|
||||
|
||||
CATCH cx_root INTO lo_root.
|
||||
MESSAGE lo_root TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
|
||||
ENDFORM.
|
||||
|
||||
*&---------------------------------------------------------------------*
|
||||
*& Form Get_file_path
|
||||
*&---------------------------------------------------------------------*
|
||||
FORM get_file_path CHANGING cv_path TYPE string.
|
||||
|
||||
DATA:
|
||||
lv_rc TYPE i,
|
||||
lv_user_action TYPE i,
|
||||
lt_file_table TYPE filetable,
|
||||
ls_file_table LIKE LINE OF lt_file_table.
|
||||
|
||||
CLEAR cv_path.
|
||||
|
||||
cl_gui_frontend_services=>file_open_dialog(
|
||||
EXPORTING
|
||||
window_title = 'select template xlsx'
|
||||
multiselection = ''
|
||||
default_extension = '*.xlsx'
|
||||
file_filter = 'Text file (*.xlsx)|*.xlsx|All (*.*)|*.*'
|
||||
CHANGING
|
||||
file_table = lt_file_table
|
||||
rc = lv_rc
|
||||
user_action = lv_user_action
|
||||
EXCEPTIONS
|
||||
OTHERS = 1
|
||||
).
|
||||
IF sy-subrc = 0.
|
||||
IF lv_user_action = cl_gui_frontend_services=>action_ok.
|
||||
IF lt_file_table IS NOT INITIAL.
|
||||
READ TABLE lt_file_table INTO ls_file_table INDEX 1.
|
||||
IF sy-subrc = 0.
|
||||
cv_path = ls_file_table-filename.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDFORM. " Get_file_path
|
||||
|
||||
FORM load_smw0
|
||||
USING
|
||||
io_reader TYPE REF TO zif_excel_reader
|
||||
iv_w3objid TYPE w3objid
|
||||
CHANGING
|
||||
ro_excel TYPE REF TO zcl_excel
|
||||
RAISING
|
||||
zcx_excel.
|
||||
|
||||
DATA: lv_excel_data TYPE xstring,
|
||||
lt_mime TYPE TABLE OF w3mime,
|
||||
ls_key TYPE wwwdatatab,
|
||||
lv_errormessage TYPE string,
|
||||
lv_filesize TYPE i,
|
||||
lv_filesizec TYPE c LENGTH 10.
|
||||
|
||||
*--------------------------------------------------------------------*
|
||||
* Read file into binary string
|
||||
*--------------------------------------------------------------------*
|
||||
|
||||
ls_key-relid = 'MI'.
|
||||
ls_key-objid = iv_w3objid .
|
||||
|
||||
CALL FUNCTION 'WWWDATA_IMPORT'
|
||||
EXPORTING
|
||||
key = ls_key
|
||||
TABLES
|
||||
mime = lt_mime
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
IF sy-subrc <> 0.
|
||||
lv_errormessage = 'A problem occured when reading the MIME object'(004).
|
||||
zcx_excel=>raise_text( lv_errormessage ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'WWWPARAMS_READ'
|
||||
EXPORTING
|
||||
relid = ls_key-relid
|
||||
objid = ls_key-objid
|
||||
name = 'filesize'
|
||||
IMPORTING
|
||||
value = lv_filesizec.
|
||||
|
||||
lv_filesize = lv_filesizec.
|
||||
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
|
||||
EXPORTING
|
||||
input_length = lv_filesize
|
||||
IMPORTING
|
||||
buffer = lv_excel_data
|
||||
TABLES
|
||||
binary_tab = lt_mime
|
||||
EXCEPTIONS
|
||||
failed = 1
|
||||
OTHERS = 2.
|
||||
|
||||
*--------------------------------------------------------------------*
|
||||
* Parse Excel data into ZCL_EXCEL object from binary string
|
||||
*--------------------------------------------------------------------*
|
||||
ro_excel = io_reader->load( i_excel2007 = lv_excel_data ).
|
||||
|
||||
ENDFORM.
|
58
src/demos/zdemo_excel_fill_template.prog.xml
Normal file
58
src/demos/zdemo_excel_fill_template.prog.xml
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZDEMO_EXCEL_FILL_TEMPLATE</NAME>
|
||||
<SUBC>1</SUBC>
|
||||
<RSTAT>T</RSTAT>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>abap2xlsx Demo: Fill template</ENTRY>
|
||||
<LENGTH>29</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_FILE</KEY>
|
||||
<ENTRY>Load template from file</ENTRY>
|
||||
<LENGTH>31</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_FPATH</KEY>
|
||||
<ENTRY>Path to template.xlsx</ENTRY>
|
||||
<LENGTH>29</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_OBJID</KEY>
|
||||
<ENTRY>Object ID</ENTRY>
|
||||
<LENGTH>17</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_PATH</KEY>
|
||||
<ENTRY>.</ENTRY>
|
||||
<LENGTH>9</LENGTH>
|
||||
<SPLIT>D</SPLIT>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_SMW0</KEY>
|
||||
<ENTRY>Load template from SMW0</ENTRY>
|
||||
<LENGTH>31</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>RB_BACK</KEY>
|
||||
<LENGTH>17</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
BIN
src/demos/zdemo_excel_template.w3mi.data.xlsx
Normal file
BIN
src/demos/zdemo_excel_template.w3mi.data.xlsx
Normal file
Binary file not shown.
29
src/demos/zdemo_excel_template.w3mi.xml
Normal file
29
src/demos/zdemo_excel_template.w3mi.xml
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_W3MI" serializer_version="v2.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<NAME>ZDEMO_EXCEL_TEMPLATE</NAME>
|
||||
<TEXT>ZDEMO_EXCEL_TEMPLATE</TEXT>
|
||||
<PARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZDEMO_EXCEL_TEMPLATE</OBJID>
|
||||
<NAME>fileextension</NAME>
|
||||
<VALUE>.xlsx</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZDEMO_EXCEL_TEMPLATE</OBJID>
|
||||
<NAME>filename</NAME>
|
||||
<VALUE>ZABAP2XLSX_EXAMPLE.xlsx</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZDEMO_EXCEL_TEMPLATE</OBJID>
|
||||
<NAME>mimetype</NAME>
|
||||
<VALUE>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</VALUE>
|
||||
</WWWPARAMS>
|
||||
</PARAMS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
381
src/not_cloud/zexcel_template_get_types.prog.abap
Normal file
381
src/not_cloud/zexcel_template_get_types.prog.abap
Normal file
|
@ -0,0 +1,381 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Report ZEXCEL_TEMPLATE_GET_TYPES
|
||||
*&
|
||||
*&---------------------------------------------------------------------*
|
||||
*&
|
||||
*&
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
REPORT zexcel_template_get_types.
|
||||
|
||||
TYPES : tt_text TYPE TABLE OF text80.
|
||||
|
||||
DATA: go_excel TYPE REF TO zcl_excel,
|
||||
go_reader TYPE REF TO zif_excel_reader,
|
||||
go_template_filler TYPE REF TO zcl_excel_fill_template,
|
||||
go_error TYPE REF TO zcx_excel.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME.
|
||||
|
||||
PARAMETERS: p_smw0 RADIOBUTTON GROUP rad2 DEFAULT 'X'.
|
||||
PARAMETERS: p_objid TYPE w3objid OBLIGATORY DEFAULT 'ZDEMO_EXCEL_TEMPLATE'.
|
||||
|
||||
PARAMETERS: p_file RADIOBUTTON GROUP rad2.
|
||||
PARAMETERS: p_fpath TYPE string OBLIGATORY LOWER CASE DEFAULT 'c:\temp\whatever.xlsx'.
|
||||
|
||||
SELECTION-SCREEN END OF BLOCK b02.
|
||||
|
||||
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
|
||||
|
||||
PARAMETERS: p_normal RADIOBUTTON GROUP rad1 DEFAULT 'X',
|
||||
p_other RADIOBUTTON GROUP rad1.
|
||||
|
||||
SELECTION-SCREEN END OF BLOCK b01.
|
||||
|
||||
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.
|
||||
PERFORM get_file_path CHANGING p_fpath.
|
||||
|
||||
|
||||
START-OF-SELECTION.
|
||||
|
||||
TRY.
|
||||
|
||||
CREATE OBJECT go_reader TYPE zcl_excel_reader_2007.
|
||||
|
||||
* load template
|
||||
IF p_file IS NOT INITIAL.
|
||||
go_excel = go_reader->load_file( p_fpath ).
|
||||
ELSE.
|
||||
PERFORM load_smw0 USING go_reader p_objid CHANGING go_excel.
|
||||
ENDIF.
|
||||
|
||||
go_template_filler = zcl_excel_fill_template=>create( go_excel ).
|
||||
|
||||
PERFORM get_types.
|
||||
|
||||
CATCH zcx_excel INTO go_error.
|
||||
MESSAGE go_error TYPE 'I' DISPLAY LIKE 'E'.
|
||||
ENDTRY.
|
||||
|
||||
|
||||
*&---------------------------------------------------------------------*
|
||||
*& Form Get_file_path
|
||||
*&---------------------------------------------------------------------*
|
||||
FORM get_file_path CHANGING cv_path TYPE string.
|
||||
|
||||
DATA:
|
||||
lv_rc TYPE i,
|
||||
lv_user_action TYPE i,
|
||||
lt_file_table TYPE filetable,
|
||||
ls_file_table LIKE LINE OF lt_file_table.
|
||||
|
||||
CLEAR cv_path.
|
||||
|
||||
cl_gui_frontend_services=>file_open_dialog(
|
||||
EXPORTING
|
||||
window_title = 'select template xlsx'
|
||||
multiselection = ''
|
||||
default_extension = '*.xlsx'
|
||||
file_filter = 'Text file (*.xlsx)|*.xlsx|All (*.*)|*.*'
|
||||
CHANGING
|
||||
file_table = lt_file_table
|
||||
rc = lv_rc
|
||||
user_action = lv_user_action
|
||||
EXCEPTIONS
|
||||
OTHERS = 1 ).
|
||||
IF sy-subrc = 0.
|
||||
IF lv_user_action = cl_gui_frontend_services=>action_ok.
|
||||
IF lt_file_table IS NOT INITIAL.
|
||||
READ TABLE lt_file_table INTO ls_file_table INDEX 1.
|
||||
IF sy-subrc = 0.
|
||||
cv_path = ls_file_table-filename.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDFORM. " Get_file_path
|
||||
|
||||
FORM get_types .
|
||||
|
||||
DATA: lv_sum TYPE i,
|
||||
lt_res TYPE tt_text,
|
||||
lt_buf TYPE tt_text,
|
||||
lv_lines TYPE i.
|
||||
|
||||
FIELD-SYMBOLS: <ls_sheet> LIKE LINE OF go_template_filler->mt_sheet,
|
||||
<lv_res> TYPE text80.
|
||||
|
||||
|
||||
LOOP AT go_template_filler->mt_sheet ASSIGNING <ls_sheet>.
|
||||
|
||||
CLEAR lv_sum.
|
||||
|
||||
READ TABLE go_template_filler->mt_range TRANSPORTING NO FIELDS WITH KEY sheet = <ls_sheet>.
|
||||
|
||||
ADD sy-subrc TO lv_sum.
|
||||
|
||||
READ TABLE go_template_filler->mt_var TRANSPORTING NO FIELDS WITH KEY sheet = <ls_sheet>.
|
||||
|
||||
ADD sy-subrc TO lv_sum.
|
||||
|
||||
CHECK lv_sum <= 4.
|
||||
|
||||
PERFORM get_type_r USING <ls_sheet> 0 CHANGING lt_buf.
|
||||
|
||||
APPEND LINES OF lt_buf TO lt_res.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
|
||||
IF p_normal IS INITIAL.
|
||||
READ TABLE lt_res ASSIGNING <lv_res> INDEX 1.
|
||||
TRANSLATE <lv_res> USING ',:'.
|
||||
INSERT INITIAL LINE INTO lt_res ASSIGNING <lv_res> INDEX 1.
|
||||
<lv_res> = 'TYPES'.
|
||||
APPEND INITIAL LINE TO lt_res ASSIGNING <lv_res>.
|
||||
<lv_res> = '.'.
|
||||
|
||||
lv_lines = lines( lt_res ) - 2.
|
||||
DELETE lt_res INDEX lv_lines.
|
||||
DELETE lt_res INDEX lv_lines.
|
||||
|
||||
ELSE.
|
||||
INSERT INITIAL LINE INTO lt_res ASSIGNING <lv_res> INDEX 1.
|
||||
<lv_res> = 'TYPES:'.
|
||||
|
||||
lv_lines = lines( lt_res ) - 2.
|
||||
|
||||
READ TABLE lt_res ASSIGNING <lv_res> INDEX lv_lines.
|
||||
TRANSLATE <lv_res> USING ',.'.
|
||||
ADD 1 TO lv_lines.
|
||||
|
||||
ENDIF.
|
||||
|
||||
INSERT 'TYPES t_number TYPE p length 16 decimals 4.' INTO lt_res INDEX 1.
|
||||
|
||||
IF p_normal IS INITIAL.
|
||||
APPEND INITIAL LINE TO lt_res ASSIGNING <lv_res>.
|
||||
<lv_res> = 'DATA'.
|
||||
APPEND INITIAL LINE TO lt_res ASSIGNING <lv_res>.
|
||||
<lv_res> = ': lo_data type ref to ZCL_EXCEL_TEMPLATE_DATA'.
|
||||
APPEND INITIAL LINE TO lt_res ASSIGNING <lv_res>.
|
||||
<lv_res> = '.'.
|
||||
|
||||
ELSE.
|
||||
APPEND INITIAL LINE TO lt_res ASSIGNING <lv_res>.
|
||||
<lv_res> = 'DATA: lo_data type ref to ZCL_EXCEL_TEMPLATE_DATA.'.
|
||||
ENDIF.
|
||||
|
||||
cl_demo_output=>new( 'TEXT' )->display( lt_res ).
|
||||
ENDFORM.
|
||||
|
||||
|
||||
FORM get_type_r USING iv_sheet TYPE zexcel_sheet_title
|
||||
iv_parent TYPE i
|
||||
CHANGING ct_result TYPE tt_text.
|
||||
|
||||
DATA: lt_buf TYPE tt_text,
|
||||
lt_tmp TYPE tt_text,
|
||||
lv_sum TYPE i,
|
||||
lv_name TYPE string,
|
||||
lv_type TYPE string,
|
||||
lv_string TYPE string,
|
||||
lt_sorted_counters TYPE TABLE OF i,
|
||||
lv_biggest_counter TYPE i.
|
||||
|
||||
FIELD-SYMBOLS: <lv_buf> TYPE text80,
|
||||
<ls_range> LIKE LINE OF go_template_filler->mt_range,
|
||||
<ls_var> TYPE zcl_excel_fill_template=>ts_variable,
|
||||
<ls_name_style> TYPE zcl_excel_fill_template=>ts_name_style.
|
||||
|
||||
|
||||
CLEAR ct_result.
|
||||
|
||||
LOOP AT go_template_filler->mt_range ASSIGNING <ls_range> WHERE sheet = iv_sheet
|
||||
AND parent = iv_parent.
|
||||
|
||||
PERFORM get_type_r
|
||||
USING
|
||||
iv_sheet
|
||||
<ls_range>-id
|
||||
CHANGING
|
||||
lt_tmp.
|
||||
|
||||
APPEND LINES OF lt_tmp TO lt_buf.
|
||||
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ADD sy-subrc TO lv_sum.
|
||||
|
||||
IF iv_parent = 0.
|
||||
lv_name = iv_sheet.
|
||||
ELSE.
|
||||
READ TABLE go_template_filler->mt_range ASSIGNING <ls_range>
|
||||
WITH KEY sheet = iv_sheet
|
||||
id = iv_parent.
|
||||
lv_name = <ls_range>-name.
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
IF p_normal IS INITIAL.
|
||||
CONCATENATE ', begin of t_' lv_name INTO <lv_buf>.
|
||||
ELSE.
|
||||
CONCATENATE ' begin of t_' lv_name ',' INTO <lv_buf>.
|
||||
ENDIF.
|
||||
|
||||
|
||||
LOOP AT go_template_filler->mt_var ASSIGNING <ls_var> WHERE sheet = iv_sheet
|
||||
AND parent = iv_parent.
|
||||
|
||||
READ TABLE go_template_filler->mt_name_styles
|
||||
WITH KEY sheet = iv_sheet
|
||||
name = <ls_var>-name
|
||||
parent = iv_parent
|
||||
ASSIGNING <ls_name_style>.
|
||||
IF sy-subrc <> 0.
|
||||
lv_type = 'string'.
|
||||
ELSE.
|
||||
CLEAR lt_sorted_counters.
|
||||
APPEND <ls_name_style>-numeric_counter TO lt_sorted_counters.
|
||||
APPEND <ls_name_style>-date_counter TO lt_sorted_counters.
|
||||
APPEND <ls_name_style>-time_counter TO lt_sorted_counters.
|
||||
APPEND <ls_name_style>-text_counter TO lt_sorted_counters.
|
||||
SORT lt_sorted_counters BY table_line DESCENDING.
|
||||
READ TABLE lt_sorted_counters INDEX 1 INTO lv_biggest_counter.
|
||||
ASSERT sy-subrc = 0.
|
||||
CASE lv_biggest_counter.
|
||||
WHEN <ls_name_style>-numeric_counter.
|
||||
lv_type = 't_number'.
|
||||
WHEN <ls_name_style>-date_counter.
|
||||
lv_type = 'd'.
|
||||
WHEN <ls_name_style>-time_counter.
|
||||
lv_type = 't'.
|
||||
WHEN <ls_name_style>-text_counter.
|
||||
lv_type = 'string'.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
IF p_normal IS INITIAL.
|
||||
CONCATENATE ', ' <ls_var>-name ' type ' lv_type INTO <lv_buf> RESPECTING BLANKS.
|
||||
ELSE.
|
||||
CONCATENATE ' ' <ls_var>-name ' type ' lv_type ',' INTO <lv_buf> RESPECTING BLANKS.
|
||||
ENDIF.
|
||||
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ADD sy-subrc TO lv_sum.
|
||||
|
||||
LOOP AT go_template_filler->mt_range ASSIGNING <ls_range> WHERE sheet = iv_sheet
|
||||
AND parent = iv_parent.
|
||||
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
lv_string = <ls_range>-name.
|
||||
IF p_normal IS INITIAL.
|
||||
CONCATENATE ', ' <ls_range>-name ' type tt_' lv_string INTO <lv_buf> RESPECTING BLANKS .
|
||||
ELSE.
|
||||
CONCATENATE ' ' <ls_range>-name ' type tt_' lv_string ',' INTO <lv_buf> RESPECTING BLANKS .
|
||||
ENDIF.
|
||||
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
IF lv_sum > 4.
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
IF p_normal IS INITIAL.
|
||||
<lv_buf> = ', xz type i'.
|
||||
ELSE.
|
||||
<lv_buf> = ' xz type i,'.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
IF p_normal IS INITIAL.
|
||||
CONCATENATE ', end of t_' lv_name INTO <lv_buf>.
|
||||
ELSE.
|
||||
CONCATENATE ' end of t_' lv_name ',' INTO <lv_buf>.
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
|
||||
IF iv_parent NE 0.
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
IF p_normal IS INITIAL.
|
||||
CONCATENATE ', tt_' lv_name ' type standard table of t_' lv_name ' with default key' INTO <lv_buf> RESPECTING BLANKS .
|
||||
ELSE.
|
||||
CONCATENATE ' tt_' lv_name ' type standard table of t_' lv_name ' with default key,' INTO <lv_buf> RESPECTING BLANKS .
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO lt_buf ASSIGNING <lv_buf>.
|
||||
|
||||
|
||||
ct_result = lt_buf.
|
||||
ENDFORM.
|
||||
|
||||
FORM load_smw0
|
||||
USING
|
||||
io_reader TYPE REF TO zif_excel_reader
|
||||
iv_w3objid TYPE w3objid
|
||||
CHANGING
|
||||
ro_excel TYPE REF TO zcl_excel
|
||||
RAISING
|
||||
zcx_excel.
|
||||
|
||||
DATA: lv_excel_data TYPE xstring,
|
||||
lt_mime TYPE TABLE OF w3mime,
|
||||
ls_key TYPE wwwdatatab,
|
||||
lv_errormessage TYPE string,
|
||||
lv_filesize TYPE i,
|
||||
lv_filesizec TYPE c LENGTH 10.
|
||||
|
||||
*--------------------------------------------------------------------*
|
||||
* Read file into binary string
|
||||
*--------------------------------------------------------------------*
|
||||
|
||||
ls_key-relid = 'MI'.
|
||||
ls_key-objid = iv_w3objid .
|
||||
|
||||
CALL FUNCTION 'WWWDATA_IMPORT'
|
||||
EXPORTING
|
||||
key = ls_key
|
||||
TABLES
|
||||
mime = lt_mime
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
IF sy-subrc <> 0.
|
||||
lv_errormessage = 'A problem occured when reading the MIME object'(004).
|
||||
zcx_excel=>raise_text( lv_errormessage ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'WWWPARAMS_READ'
|
||||
EXPORTING
|
||||
relid = ls_key-relid
|
||||
objid = ls_key-objid
|
||||
name = 'filesize'
|
||||
IMPORTING
|
||||
value = lv_filesizec.
|
||||
|
||||
lv_filesize = lv_filesizec.
|
||||
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
|
||||
EXPORTING
|
||||
input_length = lv_filesize
|
||||
IMPORTING
|
||||
buffer = lv_excel_data
|
||||
TABLES
|
||||
binary_tab = lt_mime
|
||||
EXCEPTIONS
|
||||
failed = 1
|
||||
OTHERS = 2.
|
||||
|
||||
*--------------------------------------------------------------------*
|
||||
* Parse Excel data into ZCL_EXCEL object from binary string
|
||||
*--------------------------------------------------------------------*
|
||||
ro_excel = io_reader->load( i_excel2007 = lv_excel_data ).
|
||||
|
||||
ENDFORM.
|
58
src/not_cloud/zexcel_template_get_types.prog.xml
Normal file
58
src/not_cloud/zexcel_template_get_types.prog.xml
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZEXCEL_TEMPLATE_GET_TYPES</NAME>
|
||||
<SUBC>1</SUBC>
|
||||
<RSTAT>T</RSTAT>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>Generate ABAP code (Types) for template workbook</ENTRY>
|
||||
<LENGTH>48</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_FILE</KEY>
|
||||
<ENTRY>Load template from file</ENTRY>
|
||||
<LENGTH>31</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_FPATH</KEY>
|
||||
<ENTRY>Path to template.xlsx</ENTRY>
|
||||
<LENGTH>29</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_NORMAL</KEY>
|
||||
<ENTRY>Normal comma at end,</ENTRY>
|
||||
<LENGTH>28</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_OBJID</KEY>
|
||||
<ENTRY>Object ID</ENTRY>
|
||||
<LENGTH>17</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_OTHER</KEY>
|
||||
<ENTRY>, comma at begin of line</ENTRY>
|
||||
<LENGTH>37</LENGTH>
|
||||
</item>
|
||||
<item>
|
||||
<ID>S</ID>
|
||||
<KEY>P_SMW0</KEY>
|
||||
<ENTRY>Load template from SMW0</ENTRY>
|
||||
<LENGTH>31</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -146,6 +146,11 @@ CLASS zcl_excel DEFINITION
|
|||
METHODS set_theme
|
||||
IMPORTING
|
||||
!io_theme TYPE REF TO zcl_excel_theme .
|
||||
METHODS fill_template
|
||||
importing
|
||||
!iv_data TYPE REF TO ZCL_EXCEL_TEMPLATE_DATA
|
||||
RAISING
|
||||
zcx_excel .
|
||||
PROTECTED SECTION.
|
||||
|
||||
DATA worksheets TYPE REF TO zcl_excel_worksheets .
|
||||
|
@ -670,4 +675,26 @@ CLASS zcl_excel IMPLEMENTATION.
|
|||
METHOD zif_excel_book_vba_project~set_vbaproject.
|
||||
me->zif_excel_book_vba_project~vbaproject = ip_vbaproject.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD fill_template.
|
||||
|
||||
DATA: lo_template_filler TYPE REF TO zcl_excel_fill_template.
|
||||
|
||||
FIELD-SYMBOLS:
|
||||
<lv_sheet> TYPE zexcel_sheet_title,
|
||||
<lv_data_line> TYPE zcl_excel_template_data=>ts_template_data_sheet.
|
||||
|
||||
|
||||
lo_template_filler = zcl_excel_fill_template=>create( me ).
|
||||
|
||||
LOOP AT lo_template_filler->mt_sheet ASSIGNING <lv_sheet>.
|
||||
|
||||
READ TABLE iv_data->mt_data ASSIGNING <lv_data_line> WITH KEY sheet = <lv_sheet>.
|
||||
CHECK sy-subrc = 0.
|
||||
lo_template_filler->fill_sheet( <lv_data_line> ).
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
649
src/zcl_excel_fill_template.clas.abap
Normal file
649
src/zcl_excel_fill_template.clas.abap
Normal file
|
@ -0,0 +1,649 @@
|
|||
CLASS zcl_excel_fill_template DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES: tv_range_name TYPE c LENGTH 30,
|
||||
BEGIN OF ts_range,
|
||||
sheet TYPE zexcel_sheet_title,
|
||||
name TYPE tv_range_name,
|
||||
start TYPE zexcel_cell_row,
|
||||
stop TYPE zexcel_cell_row,
|
||||
id TYPE i,
|
||||
parent TYPE i,
|
||||
length TYPE i,
|
||||
END OF ts_range,
|
||||
tt_ranges TYPE STANDARD TABLE OF ts_range WITH DEFAULT KEY,
|
||||
BEGIN OF ts_variable,
|
||||
sheet TYPE zexcel_sheet_title,
|
||||
parent TYPE i,
|
||||
name TYPE tv_range_name,
|
||||
END OF ts_variable,
|
||||
BEGIN OF ts_name_style,
|
||||
sheet TYPE zexcel_sheet_title,
|
||||
name TYPE tv_range_name,
|
||||
parent TYPE i,
|
||||
numeric_counter TYPE i,
|
||||
date_counter TYPE i,
|
||||
time_counter TYPE i,
|
||||
text_counter TYPE i,
|
||||
END OF ts_name_style,
|
||||
tt_variables TYPE STANDARD TABLE OF ts_variable WITH DEFAULT KEY,
|
||||
tt_sheet_titles TYPE STANDARD TABLE OF zexcel_sheet_title WITH DEFAULT KEY,
|
||||
tt_name_styles TYPE STANDARD TABLE OF ts_name_style WITH DEFAULT KEY.
|
||||
|
||||
DATA mt_sheet TYPE tt_sheet_titles READ-ONLY.
|
||||
DATA mt_range TYPE tt_ranges READ-ONLY.
|
||||
DATA mt_var TYPE tt_variables READ-ONLY.
|
||||
DATA mo_excel TYPE REF TO zcl_excel READ-ONLY.
|
||||
DATA mt_name_styles TYPE tt_name_styles READ-ONLY.
|
||||
|
||||
CLASS-METHODS create
|
||||
IMPORTING
|
||||
!io_excel TYPE REF TO zcl_excel
|
||||
RETURNING
|
||||
VALUE(eo_template_filler) TYPE REF TO zcl_excel_fill_template
|
||||
RAISING
|
||||
zcx_excel.
|
||||
|
||||
METHODS fill_sheet
|
||||
IMPORTING
|
||||
!iv_data TYPE zcl_excel_template_data=>ts_template_data_sheet
|
||||
RAISING
|
||||
zcx_excel .
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES: tt_cell_data_no_key TYPE STANDARD TABLE OF zexcel_s_cell_data WITH DEFAULT KEY.
|
||||
|
||||
METHODS fill_range
|
||||
IMPORTING
|
||||
!iv_sheet TYPE zexcel_sheet_title
|
||||
!iv_parent TYPE zexcel_cell_row
|
||||
!iv_data TYPE data
|
||||
VALUE(iv_range_length) TYPE zexcel_cell_row
|
||||
!io_sheet TYPE REF TO zcl_excel_worksheet
|
||||
CHANGING
|
||||
!ct_cells TYPE tt_cell_data_no_key
|
||||
!cv_diff TYPE zexcel_cell_row
|
||||
!ct_merged_cells TYPE zcl_excel_worksheet=>mty_ts_merge
|
||||
RAISING
|
||||
zcx_excel .
|
||||
METHODS get_range .
|
||||
METHODS validate_range
|
||||
IMPORTING
|
||||
!io_range TYPE REF TO zcl_excel_range .
|
||||
METHODS discard_overlapped .
|
||||
METHODS sign_range .
|
||||
METHODS find_var
|
||||
RAISING
|
||||
zcx_excel .
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_excel_fill_template IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD create.
|
||||
|
||||
CREATE OBJECT eo_template_filler .
|
||||
|
||||
eo_template_filler->mo_excel = io_excel.
|
||||
eo_template_filler->get_range( ).
|
||||
eo_template_filler->discard_overlapped( ).
|
||||
eo_template_filler->sign_range( ).
|
||||
eo_template_filler->find_var( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD discard_overlapped.
|
||||
DATA:
|
||||
lt_range TYPE tt_ranges.
|
||||
FIELD-SYMBOLS:
|
||||
<ls_range> TYPE ts_range,
|
||||
<ls_range_2> TYPE ts_range.
|
||||
|
||||
SORT mt_range BY sheet start stop.
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range>.
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range_2> WHERE sheet = <ls_range>-sheet
|
||||
AND name <> <ls_range>-name
|
||||
AND stop >= <ls_range>-start
|
||||
AND start < <ls_range>-start
|
||||
AND stop < <ls_range>-stop.
|
||||
EXIT.
|
||||
ENDLOOP.
|
||||
|
||||
IF sy-subrc NE 0.
|
||||
APPEND <ls_range> TO lt_range.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
mt_range = lt_range.
|
||||
|
||||
SORT mt_range BY sheet start stop DESCENDING.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD fill_range.
|
||||
|
||||
DATA: lt_tmp_cells_template TYPE tt_cell_data_no_key,
|
||||
lt_cells_result TYPE tt_cell_data_no_key,
|
||||
lt_tmp_cells TYPE tt_cell_data_no_key,
|
||||
ls_cell TYPE zexcel_s_cell_data,
|
||||
lt_tmp_merged_cells_template TYPE zcl_excel_worksheet=>mty_ts_merge,
|
||||
lt_merged_cells_result TYPE zcl_excel_worksheet=>mty_ts_merge,
|
||||
lt_tmp_merged_cells TYPE zcl_excel_worksheet=>mty_ts_merge,
|
||||
ls_merged_cell LIKE LINE OF lt_tmp_merged_cells,
|
||||
lv_start_row TYPE i,
|
||||
lv_stop_row TYPE i,
|
||||
lv_cell_row TYPE i,
|
||||
lv_column_alpha TYPE string,
|
||||
lt_matches TYPE match_result_tab,
|
||||
lv_search TYPE string,
|
||||
lv_var_name TYPE string,
|
||||
lv_cell_value TYPE string.
|
||||
|
||||
FIELD-SYMBOLS:
|
||||
<table> TYPE ANY TABLE,
|
||||
<line> TYPE any,
|
||||
<ls_range> TYPE ts_range,
|
||||
<ls_cell> TYPE zexcel_s_cell_data,
|
||||
<ls_match> TYPE match_result,
|
||||
<var_value> TYPE any.
|
||||
|
||||
|
||||
cv_diff = cv_diff + iv_range_length .
|
||||
|
||||
lv_start_row = 1.
|
||||
|
||||
|
||||
* recursive fill nested range
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range> WHERE sheet = iv_sheet
|
||||
AND parent = iv_parent.
|
||||
|
||||
|
||||
lv_stop_row = <ls_range>-start - 1.
|
||||
|
||||
* update cells before any range
|
||||
|
||||
LOOP AT ct_cells INTO ls_cell WHERE cell_row >= lv_start_row AND cell_row <= lv_stop_row .
|
||||
ls_cell-cell_row = ls_cell-cell_row + cv_diff.
|
||||
lv_column_alpha = zcl_excel_common=>convert_column2alpha( ls_cell-cell_column ).
|
||||
|
||||
ls_cell-cell_coords = ls_cell-cell_row.
|
||||
CONCATENATE lv_column_alpha ls_cell-cell_coords INTO ls_cell-cell_coords.
|
||||
CONDENSE ls_cell-cell_coords NO-GAPS.
|
||||
|
||||
APPEND ls_cell TO lt_cells_result.
|
||||
ENDLOOP.
|
||||
|
||||
|
||||
|
||||
* update merged cells before range
|
||||
|
||||
LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= lv_start_row AND row_to <= lv_stop_row.
|
||||
ls_merged_cell-row_from = ls_merged_cell-row_from + cv_diff.
|
||||
ls_merged_cell-row_to = ls_merged_cell-row_to + cv_diff.
|
||||
|
||||
APPEND ls_merged_cell TO lt_merged_cells_result.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
|
||||
|
||||
lv_start_row = <ls_range>-stop + 1.
|
||||
|
||||
|
||||
|
||||
CLEAR:
|
||||
lt_tmp_cells_template,
|
||||
lt_tmp_merged_cells_template.
|
||||
|
||||
|
||||
*copy cell template
|
||||
LOOP AT ct_cells INTO ls_cell WHERE cell_row >= <ls_range>-start AND cell_row <= <ls_range>-stop.
|
||||
APPEND ls_cell TO lt_tmp_cells_template.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from >= <ls_range>-start AND row_to <= <ls_range>-stop.
|
||||
APPEND ls_merged_cell TO lt_tmp_merged_cells_template.
|
||||
ENDLOOP.
|
||||
|
||||
|
||||
ASSIGN COMPONENT <ls_range>-name OF STRUCTURE iv_data TO <table>.
|
||||
CHECK sy-subrc = 0.
|
||||
|
||||
cv_diff = cv_diff - <ls_range>-length.
|
||||
|
||||
*merge each line of data table with template
|
||||
LOOP AT <table> ASSIGNING <line>.
|
||||
* make local copy
|
||||
lt_tmp_cells = lt_tmp_cells_template.
|
||||
lt_tmp_merged_cells = lt_tmp_merged_cells_template.
|
||||
|
||||
*fill data
|
||||
|
||||
fill_range(
|
||||
EXPORTING
|
||||
io_sheet = io_sheet
|
||||
iv_sheet = iv_sheet
|
||||
iv_parent = <ls_range>-id
|
||||
iv_data = <line>
|
||||
iv_range_length = <ls_range>-length
|
||||
CHANGING
|
||||
ct_cells = lt_tmp_cells
|
||||
ct_merged_cells = lt_tmp_merged_cells
|
||||
cv_diff = cv_diff ).
|
||||
|
||||
*collect data
|
||||
|
||||
APPEND LINES OF lt_tmp_cells TO lt_cells_result.
|
||||
APPEND LINES OF lt_tmp_merged_cells TO lt_merged_cells_result.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
|
||||
IF <ls_range> IS ASSIGNED.
|
||||
|
||||
LOOP AT ct_cells INTO ls_cell WHERE cell_row > <ls_range>-stop .
|
||||
ls_cell-cell_row = ls_cell-cell_row + cv_diff.
|
||||
lv_column_alpha = zcl_excel_common=>convert_column2alpha( ls_cell-cell_column ).
|
||||
|
||||
ls_cell-cell_coords = ls_cell-cell_row.
|
||||
CONCATENATE lv_column_alpha ls_cell-cell_coords INTO ls_cell-cell_coords.
|
||||
CONDENSE ls_cell-cell_coords NO-GAPS.
|
||||
|
||||
APPEND ls_cell TO lt_cells_result.
|
||||
ENDLOOP.
|
||||
|
||||
ct_cells = lt_cells_result.
|
||||
|
||||
LOOP AT ct_merged_cells INTO ls_merged_cell WHERE row_from > <ls_range>-stop.
|
||||
ls_merged_cell-row_from = ls_merged_cell-row_from + cv_diff.
|
||||
ls_merged_cell-row_to = ls_merged_cell-row_to + cv_diff.
|
||||
|
||||
APPEND ls_merged_cell TO lt_merged_cells_result.
|
||||
ENDLOOP.
|
||||
|
||||
ct_merged_cells = lt_merged_cells_result.
|
||||
|
||||
ELSE.
|
||||
|
||||
|
||||
LOOP AT ct_cells ASSIGNING <ls_cell>.
|
||||
<ls_cell>-cell_row = <ls_cell>-cell_row + cv_diff.
|
||||
lv_column_alpha = zcl_excel_common=>convert_column2alpha( <ls_cell>-cell_column ).
|
||||
|
||||
<ls_cell>-cell_coords = <ls_cell>-cell_row.
|
||||
CONCATENATE lv_column_alpha <ls_cell>-cell_coords INTO <ls_cell>-cell_coords.
|
||||
CONDENSE <ls_cell>-cell_coords NO-GAPS.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT ct_merged_cells INTO ls_merged_cell .
|
||||
ls_merged_cell-row_from = ls_merged_cell-row_from + cv_diff.
|
||||
ls_merged_cell-row_to = ls_merged_cell-row_to + cv_diff.
|
||||
|
||||
APPEND ls_merged_cell TO lt_merged_cells_result.
|
||||
ENDLOOP.
|
||||
|
||||
ct_merged_cells = lt_merged_cells_result.
|
||||
|
||||
ENDIF.
|
||||
|
||||
|
||||
*check if variables in this range
|
||||
READ TABLE mt_var TRANSPORTING NO FIELDS WITH KEY sheet = iv_sheet parent = iv_parent.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
|
||||
* replace variables of current range with data
|
||||
LOOP AT ct_cells ASSIGNING <ls_cell>.
|
||||
|
||||
|
||||
REFRESH lt_matches.
|
||||
|
||||
lv_cell_value = <ls_cell>-cell_value.
|
||||
|
||||
FIND ALL OCCURRENCES OF REGEX '\[[^\]]*\]' IN <ls_cell>-cell_value RESULTS lt_matches.
|
||||
|
||||
SORT lt_matches BY offset DESCENDING .
|
||||
|
||||
LOOP AT lt_matches ASSIGNING <ls_match>.
|
||||
lv_search = <ls_cell>-cell_value+<ls_match>-offset(<ls_match>-length).
|
||||
lv_var_name = lv_search.
|
||||
|
||||
TRANSLATE lv_var_name TO UPPER CASE.
|
||||
TRANSLATE lv_var_name USING '[ ] '.
|
||||
CONDENSE lv_var_name .
|
||||
|
||||
ASSIGN COMPONENT lv_var_name OF STRUCTURE iv_data TO <var_value>.
|
||||
CHECK sy-subrc = 0.
|
||||
|
||||
" Use SET_CELL to format correctly
|
||||
io_sheet->set_cell( ip_column = <ls_cell>-cell_column ip_row = <ls_cell>-cell_row - cv_diff ip_value = <var_value> ).
|
||||
lv_cell_row = <ls_cell>-cell_row - cv_diff.
|
||||
READ TABLE io_sheet->sheet_content INTO ls_cell
|
||||
WITH KEY cell_column = <ls_cell>-cell_column
|
||||
cell_row = lv_cell_row.
|
||||
REPLACE ALL OCCURRENCES OF lv_search IN <ls_cell>-cell_value WITH ls_cell-cell_value.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_matches ) = 1.
|
||||
lv_cell_row = <ls_cell>-cell_row - cv_diff.
|
||||
READ TABLE io_sheet->sheet_content INTO ls_cell
|
||||
WITH KEY cell_column = <ls_cell>-cell_column
|
||||
cell_row = lv_cell_row.
|
||||
<ls_cell>-data_type = ls_cell-data_type.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD fill_sheet.
|
||||
|
||||
DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||
lt_sheet_cells TYPE tt_cell_data_no_key,
|
||||
lt_merged_cells TYPE zcl_excel_worksheet=>mty_ts_merge,
|
||||
lt_merged_cells_2 TYPE zcl_excel_worksheet=>mty_ts_merge,
|
||||
lv_initial_diff TYPE i.
|
||||
FIELD-SYMBOLS:
|
||||
<any_data> TYPE any,
|
||||
<ls_sheet_cell> TYPE zexcel_s_cell_data,
|
||||
<ls_merged_cell> TYPE zcl_excel_worksheet=>mty_merge.
|
||||
|
||||
|
||||
lo_worksheet = mo_excel->get_worksheet_by_name( iv_data-sheet ).
|
||||
|
||||
lt_sheet_cells = lo_worksheet->sheet_content.
|
||||
lt_merged_cells = lo_worksheet->mt_merged_cells.
|
||||
|
||||
ASSIGN iv_data-data->* TO <any_data>.
|
||||
|
||||
fill_range(
|
||||
EXPORTING
|
||||
io_sheet = lo_worksheet
|
||||
iv_range_length = 0
|
||||
iv_sheet = iv_data-sheet
|
||||
iv_parent = 0
|
||||
iv_data = <any_data>
|
||||
CHANGING
|
||||
ct_cells = lt_sheet_cells
|
||||
ct_merged_cells = lt_merged_cells
|
||||
cv_diff = lv_initial_diff ).
|
||||
|
||||
|
||||
REFRESH lo_worksheet->sheet_content.
|
||||
|
||||
LOOP AT lt_sheet_cells ASSIGNING <ls_sheet_cell>.
|
||||
INSERT <ls_sheet_cell> INTO TABLE lo_worksheet->sheet_content.
|
||||
ENDLOOP.
|
||||
|
||||
lt_merged_cells_2 = lo_worksheet->mt_merged_cells.
|
||||
LOOP AT lt_merged_cells_2 ASSIGNING <ls_merged_cell>.
|
||||
lo_worksheet->delete_merge( ip_cell_column = <ls_merged_cell>-col_from ip_cell_row = <ls_merged_cell>-row_from ).
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT lt_merged_cells ASSIGNING <ls_merged_cell>.
|
||||
lo_worksheet->set_merge(
|
||||
ip_column_start = <ls_merged_cell>-col_from
|
||||
ip_column_end = <ls_merged_cell>-col_to
|
||||
ip_row = <ls_merged_cell>-row_from
|
||||
ip_row_to = <ls_merged_cell>-row_to ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD find_var.
|
||||
|
||||
DATA: lv_row TYPE i,
|
||||
lv_column TYPE i,
|
||||
lv_column_alpha TYPE string,
|
||||
lv_value TYPE string,
|
||||
ls_name_style TYPE ts_name_style,
|
||||
lo_style TYPE REF TO zcl_excel_style,
|
||||
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||
ls_variable TYPE ts_variable,
|
||||
lv_highest_column TYPE zexcel_cell_column,
|
||||
lv_highest_row TYPE int4,
|
||||
lt_matches TYPE match_result_tab,
|
||||
lv_search TYPE string,
|
||||
lv_replace TYPE string.
|
||||
|
||||
FIELD-SYMBOLS:
|
||||
<ls_match> TYPE match_result,
|
||||
<ls_range> TYPE ts_range,
|
||||
<lv_sheet> TYPE zexcel_sheet_title,
|
||||
<ls_name_style> TYPE ts_name_style.
|
||||
|
||||
|
||||
LOOP AT mt_sheet ASSIGNING <lv_sheet>.
|
||||
|
||||
lo_worksheet ?= mo_excel->get_worksheet_by_name( <lv_sheet> ).
|
||||
lv_row = 1.
|
||||
|
||||
lv_highest_column = lo_worksheet->get_highest_column( ).
|
||||
lv_highest_row = lo_worksheet->get_highest_row( ).
|
||||
|
||||
WHILE lv_row <= lv_highest_row.
|
||||
lv_column = 1.
|
||||
WHILE lv_column <= lv_highest_column.
|
||||
lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column ).
|
||||
CLEAR lo_style.
|
||||
lo_worksheet->get_cell(
|
||||
EXPORTING
|
||||
ip_column = lv_column_alpha
|
||||
ip_row = lv_row
|
||||
IMPORTING
|
||||
ep_value = lv_value
|
||||
ep_style = lo_style ).
|
||||
|
||||
FIND ALL OCCURRENCES OF REGEX '\[[^\]]*\]' IN lv_value RESULTS lt_matches.
|
||||
|
||||
LOOP AT lt_matches ASSIGNING <ls_match>.
|
||||
lv_search = lv_value+<ls_match>-offset(<ls_match>-length).
|
||||
lv_replace = lv_search.
|
||||
|
||||
TRANSLATE lv_replace TO UPPER CASE.
|
||||
|
||||
CLEAR ls_variable.
|
||||
|
||||
ls_variable-sheet = <lv_sheet>.
|
||||
ls_variable-name = lv_replace.
|
||||
TRANSLATE ls_variable-name USING '[ ] '.
|
||||
CONDENSE ls_variable-name .
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range> WHERE sheet = <lv_sheet>
|
||||
AND start <= lv_row
|
||||
AND stop >= lv_row.
|
||||
ls_variable-parent = <ls_range>-id.
|
||||
EXIT.
|
||||
ENDLOOP.
|
||||
|
||||
READ TABLE mt_var TRANSPORTING NO FIELDS WITH KEY sheet = ls_variable-sheet name = ls_variable-name parent = ls_variable-parent.
|
||||
IF sy-subrc NE 0.
|
||||
APPEND ls_variable TO mt_var.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE mt_name_styles WITH KEY sheet = ls_variable-sheet name = ls_variable-name parent = ls_variable-parent ASSIGNING <ls_name_style>.
|
||||
IF sy-subrc NE 0.
|
||||
CLEAR ls_name_style.
|
||||
ls_name_style-sheet = <lv_sheet>.
|
||||
ls_name_style-name = ls_variable-name.
|
||||
ls_name_style-parent = ls_variable-parent.
|
||||
APPEND ls_name_style TO mt_name_styles ASSIGNING <ls_name_style>.
|
||||
ENDIF.
|
||||
IF lo_style IS NOT BOUND.
|
||||
<ls_name_style>-text_counter = <ls_name_style>-text_counter + 1.
|
||||
ELSE.
|
||||
IF lo_style->number_format->format_code CA '0'
|
||||
AND lo_style->number_format->format_code NS '0]'.
|
||||
<ls_name_style>-numeric_counter = <ls_name_style>-numeric_counter + 1.
|
||||
ELSEIF lo_style->number_format->format_code CA 'm'
|
||||
AND lo_style->number_format->format_code CA 'd'
|
||||
AND lo_style->number_format->format_code NA 'h'.
|
||||
<ls_name_style>-date_counter = <ls_name_style>-date_counter + 1.
|
||||
ELSEIF ( lo_style->number_format->format_code CA 'h' OR lo_style->number_format->format_code CA 's' )
|
||||
AND lo_style->number_format->format_code NA 'd'.
|
||||
<ls_name_style>-time_counter = <ls_name_style>-time_counter + 1.
|
||||
ELSE.
|
||||
<ls_name_style>-text_counter = <ls_name_style>-text_counter + 1.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
lv_column = lv_column + 1.
|
||||
ENDWHILE.
|
||||
lv_row = lv_row + 1.
|
||||
ENDWHILE.
|
||||
ENDLOOP.
|
||||
|
||||
SORT mt_range BY id .
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_range.
|
||||
|
||||
DATA:
|
||||
lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator,
|
||||
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
||||
lo_range_iterator TYPE REF TO cl_object_collection_iterator,
|
||||
lo_range TYPE REF TO zcl_excel_range.
|
||||
|
||||
|
||||
lo_worksheets_iterator = mo_excel->get_worksheets_iterator( ).
|
||||
|
||||
|
||||
WHILE lo_worksheets_iterator->has_next( ) = abap_true.
|
||||
lo_worksheet ?= lo_worksheets_iterator->get_next( ).
|
||||
APPEND lo_worksheet->get_title( ) TO mt_sheet.
|
||||
ENDWHILE.
|
||||
|
||||
lo_range_iterator = mo_excel->get_ranges_iterator( ).
|
||||
|
||||
WHILE lo_range_iterator->has_next( ) = abap_true.
|
||||
lo_range ?= lo_range_iterator->get_next( ).
|
||||
validate_range( lo_range ).
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD sign_range.
|
||||
|
||||
DATA: lv_tabix TYPE i.
|
||||
FIELD-SYMBOLS:
|
||||
<ls_range> TYPE ts_range,
|
||||
<ls_range_2> TYPE ts_range.
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range>.
|
||||
<ls_range>-id = sy-tabix.
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range>.
|
||||
lv_tabix = sy-tabix + 1.
|
||||
|
||||
LOOP AT mt_range ASSIGNING <ls_range_2>
|
||||
FROM lv_tabix
|
||||
WHERE sheet = <ls_range>-sheet.
|
||||
|
||||
IF <ls_range_2>-start >= <ls_range>-start AND <ls_range_2>-stop <= <ls_range>-stop.
|
||||
<ls_range_2>-parent = <ls_range>-id.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
SORT mt_range BY id DESCENDING.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD validate_range.
|
||||
|
||||
DATA: lv_range_name TYPE string,
|
||||
lv_range_address TYPE string,
|
||||
lv_range_start TYPE string,
|
||||
lv_range_stop TYPE string,
|
||||
lv_range_sheet TYPE string,
|
||||
lv_tmp_value TYPE string,
|
||||
lt_cell_coord_parts TYPE TABLE OF string,
|
||||
lv_cell_coord_start TYPE string,
|
||||
lv_cell_coord_stop TYPE string,
|
||||
lv_column_start TYPE zexcel_cell_column_alpha,
|
||||
lv_column_end TYPE zexcel_cell_column_alpha,
|
||||
lv_row_start TYPE zexcel_cell_row,
|
||||
lv_row_end TYPE zexcel_cell_row.
|
||||
|
||||
FIELD-SYMBOLS: <ls_range> TYPE ts_range.
|
||||
|
||||
|
||||
lv_range_name = io_range->name.
|
||||
TRANSLATE lv_range_name TO UPPER CASE.
|
||||
lv_range_address = io_range->get_value( ).
|
||||
|
||||
SPLIT lv_range_address AT '!' INTO lv_range_sheet lv_tmp_value.
|
||||
|
||||
SPLIT lv_tmp_value AT ':' INTO lv_range_start lv_range_stop.
|
||||
|
||||
SPLIT lv_range_start AT '$' INTO TABLE lt_cell_coord_parts.
|
||||
|
||||
IF lines( lt_cell_coord_parts ) > 2.
|
||||
TRY.
|
||||
zcl_excel_common=>convert_range2column_a_row(
|
||||
EXPORTING
|
||||
i_range = lv_range_address
|
||||
IMPORTING
|
||||
e_column_start = lv_column_start
|
||||
e_column_end = lv_column_end
|
||||
e_row_start = lv_row_start
|
||||
e_row_end = lv_row_end
|
||||
).
|
||||
CATCH zcx_excel. "
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
IF lv_column_start = 'A' AND lv_column_end = 'XFD'.
|
||||
lv_cell_coord_start = |{ lv_row_start }|.
|
||||
lv_cell_coord_stop = |{ lv_row_end }|.
|
||||
CLEAR lt_cell_coord_parts.
|
||||
CLEAR lv_range_stop.
|
||||
ELSE.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF lines( lt_cell_coord_parts ) >= 2.
|
||||
READ TABLE lt_cell_coord_parts INTO lv_cell_coord_start INDEX 2.
|
||||
ENDIF.
|
||||
|
||||
IF lv_cell_coord_start CO '0123456789'.
|
||||
APPEND INITIAL LINE TO mt_range ASSIGNING <ls_range>.
|
||||
<ls_range>-sheet = lv_range_sheet.
|
||||
<ls_range>-name = lv_range_name.
|
||||
<ls_range>-start = lv_cell_coord_start.
|
||||
|
||||
SPLIT lv_range_stop AT '$' INTO TABLE lt_cell_coord_parts.
|
||||
READ TABLE lt_cell_coord_parts INTO lv_cell_coord_stop INDEX 2.
|
||||
<ls_range>-stop = lv_cell_coord_stop.
|
||||
|
||||
<ls_range>-length = <ls_range>-stop - <ls_range>-start + 1.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
42
src/zcl_excel_fill_template.clas.xml
Normal file
42
src/zcl_excel_fill_template.clas.xml
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_EXCEL_FILL_TEMPLATE</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>poopulate excell template with data</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
<DESCRIPTIONS>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_FILL_TEMPLATE</CLSNAME>
|
||||
<CMPNAME>MO_EXCEL</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Excel creator</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_FILL_TEMPLATE</CLSNAME>
|
||||
<CMPNAME>MT_RANGE</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Range description</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_FILL_TEMPLATE</CLSNAME>
|
||||
<CMPNAME>MT_SHEET</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>table of sheet title</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
<SEOCOMPOTX>
|
||||
<CLSNAME>ZCL_EXCEL_FILL_TEMPLATE</CLSNAME>
|
||||
<CMPNAME>MT_VAR</CMPNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>var description</DESCRIPT>
|
||||
</SEOCOMPOTX>
|
||||
</DESCRIPTIONS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
42
src/zcl_excel_template_data.clas.abap
Normal file
42
src/zcl_excel_template_data.clas.abap
Normal file
|
@ -0,0 +1,42 @@
|
|||
CLASS zcl_excel_template_data DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES: tt_sheet_titles TYPE STANDARD TABLE OF zexcel_sheet_title WITH DEFAULT KEY,
|
||||
BEGIN OF ts_template_data_sheet,
|
||||
sheet TYPE zexcel_sheet_title,
|
||||
data TYPE REF TO data,
|
||||
END OF ts_template_data_sheet,
|
||||
tt_template_data_sheets TYPE STANDARD TABLE OF ts_template_data_sheet WITH DEFAULT KEY.
|
||||
|
||||
DATA mt_data TYPE tt_template_data_sheets READ-ONLY.
|
||||
|
||||
METHODS add
|
||||
IMPORTING
|
||||
iv_sheet TYPE zexcel_sheet_title
|
||||
iv_data TYPE data .
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_excel_template_data IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add.
|
||||
FIELD-SYMBOLS: <ls_data_sheet> TYPE ts_template_data_sheet,
|
||||
<any> TYPE any.
|
||||
|
||||
APPEND INITIAL LINE TO mt_data ASSIGNING <ls_data_sheet>.
|
||||
<ls_data_sheet>-sheet = iv_sheet.
|
||||
CREATE DATA <ls_data_sheet>-data LIKE iv_data.
|
||||
|
||||
ASSIGN <ls_data_sheet>-data->* TO <any>.
|
||||
<any> = iv_data.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
16
src/zcl_excel_template_data.clas.xml
Normal file
16
src/zcl_excel_template_data.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_EXCEL_TEMPLATE_DATA</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>Data for template</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -71,6 +71,15 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
TYPE HASHED TABLE OF mty_s_column_formula
|
||||
WITH UNIQUE KEY id .
|
||||
TYPES ty_doc_url TYPE c LENGTH 255.
|
||||
TYPES:
|
||||
BEGIN OF mty_merge,
|
||||
row_from TYPE i,
|
||||
row_to TYPE i,
|
||||
col_from TYPE i,
|
||||
col_to TYPE i,
|
||||
END OF mty_merge .
|
||||
TYPES:
|
||||
mty_ts_merge TYPE SORTED TABLE OF mty_merge WITH UNIQUE KEY table_line .
|
||||
|
||||
CONSTANTS c_break_column TYPE zexcel_break VALUE 2. "#EC NOTEXT
|
||||
CONSTANTS c_break_none TYPE zexcel_break VALUE 0. "#EC NOTEXT
|
||||
|
@ -90,6 +99,7 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
formula_not_in_this_table TYPE string,
|
||||
formula_in_other_column TYPE string,
|
||||
END OF c_messages.
|
||||
DATA mt_merged_cells TYPE mty_ts_merge READ-ONLY .
|
||||
|
||||
METHODS add_comment
|
||||
IMPORTING
|
||||
|
@ -636,17 +646,8 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
mty_th_font_cache
|
||||
TYPE HASHED TABLE OF mty_s_font_cache
|
||||
WITH UNIQUE KEY font_name font_height flag_bold flag_italic .
|
||||
TYPES:
|
||||
* types:
|
||||
* mty_ts_row_dimension TYPE SORTED TABLE OF zexcel_s_worksheet_rowdimensio WITH UNIQUE KEY row .
|
||||
BEGIN OF mty_merge,
|
||||
row_from TYPE i,
|
||||
row_to TYPE i,
|
||||
col_from TYPE i,
|
||||
col_to TYPE i,
|
||||
END OF mty_merge .
|
||||
TYPES:
|
||||
mty_ts_merge TYPE SORTED TABLE OF mty_merge WITH UNIQUE KEY table_line .
|
||||
|
||||
*"* private components of class ZCL_EXCEL_WORKSHEET
|
||||
*"* do not include other source files here!!!
|
||||
|
@ -668,7 +669,6 @@ CLASS zcl_excel_worksheet DEFINITION
|
|||
DATA lower_cell TYPE zexcel_s_cell_data .
|
||||
DATA mo_pagebreaks TYPE REF TO zcl_excel_worksheet_pagebreaks .
|
||||
CLASS-DATA mth_font_cache TYPE mty_th_font_cache .
|
||||
DATA mt_merged_cells TYPE mty_ts_merge .
|
||||
DATA mt_row_outlines TYPE mty_ts_outlines_row .
|
||||
DATA print_title_col_from TYPE zexcel_cell_column_alpha .
|
||||
DATA print_title_col_to TYPE zexcel_cell_column_alpha .
|
||||
|
|
Loading…
Reference in New Issue
Block a user