diff --git a/src/zcl_excel_reader_2007.clas.abap b/src/zcl_excel_reader_2007.clas.abap index 53fc484..076c885 100644 --- a/src/zcl_excel_reader_2007.clas.abap +++ b/src/zcl_excel_reader_2007.clas.abap @@ -999,25 +999,31 @@ CLASS zcl_excel_reader_2007 IMPLEMENTATION. *--------------------------------------------------------------------* CLEAR: lv_current_offset. WHILE lo_node_si_child IS BOUND. " actually these children of are -tags - CLEAR: ls_rtf. + lv_tag_name = lo_node_si_child->get_name( ). + IF lv_tag_name = 'r'. - " extracting rich text formating data - lo_node_r_child_rpr ?= lo_node_si_child->find_from_name_ns( name = 'rPr' uri = namespace-main ). - IF lo_node_r_child_rpr IS BOUND. - lo_font = load_style_font( lo_node_r_child_rpr ). - ls_rtf-font = lo_font->get_structure( ). - ENDIF. - ls_rtf-offset = lv_current_offset. - " extract the ... part of each -tag - lo_node_r_child_t ?= lo_node_si_child->find_from_name_ns( name = 't' uri = namespace-main ). - IF lo_node_r_child_t IS BOUND. - lv_node_value = unescape_string_value( lo_node_r_child_t->get_value( ) ). - CONCATENATE -value lv_node_value INTO -value RESPECTING BLANKS. - ls_rtf-length = strlen( lv_node_value ). - ENDIF. + CLEAR: ls_rtf. - lv_current_offset = strlen( -value ). - APPEND ls_rtf TO -rtf. + " extracting rich text formating data + lo_node_r_child_rpr ?= lo_node_si_child->find_from_name_ns( name = 'rPr' uri = namespace-main ). + IF lo_node_r_child_rpr IS BOUND. + lo_font = load_style_font( lo_node_r_child_rpr ). + ls_rtf-font = lo_font->get_structure( ). + ENDIF. + ls_rtf-offset = lv_current_offset. + " extract the ... part of each -tag + lo_node_r_child_t ?= lo_node_si_child->find_from_name_ns( name = 't' uri = namespace-main ). + IF lo_node_r_child_t IS BOUND. + lv_node_value = unescape_string_value( lo_node_r_child_t->get_value( ) ). + CONCATENATE -value lv_node_value INTO -value RESPECTING BLANKS. + ls_rtf-length = strlen( lv_node_value ). + + IF ls_rtf-length > 0. + lv_current_offset = strlen( -value ). + APPEND ls_rtf TO -rtf. + ENDIF. + ENDIF. + ENDIF. lo_node_si_child ?= lo_node_si_child->get_next( ). diff --git a/src/zcl_excel_writer_csv.clas.abap b/src/zcl_excel_writer_csv.clas.abap index 7aa976b..4c0dbc8 100644 --- a/src/zcl_excel_writer_csv.clas.abap +++ b/src/zcl_excel_writer_csv.clas.abap @@ -30,6 +30,12 @@ CLASS zcl_excel_writer_csv DEFINITION CLASS-METHODS set_initial_ext_date IMPORTING !ip_value TYPE char10 DEFAULT c_default . + CLASS-METHODS set_skip_hidden_rows + IMPORTING + !ip_value TYPE abap_bool. + CLASS-METHODS set_skip_hidden_columns + IMPORTING + !ip_value TYPE abap_bool. *"* protected components of class ZCL_EXCEL_WRITER_CSV *"* do not include other source files here!!! PROTECTED SECTION. @@ -45,6 +51,8 @@ CLASS zcl_excel_writer_csv DEFINITION CLASS-DATA worksheet_name TYPE zexcel_worksheets_name . CLASS-DATA worksheet_index TYPE zexcel_active_worksheet . CLASS-DATA initial_ext_date TYPE char10 VALUE c_default. + CLASS-DATA skip_hidden_rows TYPE abap_bool. + CLASS-DATA skip_hidden_columns TYPE abap_bool. METHODS create RETURNING @@ -91,6 +99,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. DATA: lo_iterator TYPE REF TO zcl_excel_collection_iterator, lo_worksheet TYPE REF TO zcl_excel_worksheet. + DATA: lo_autofilter TYPE REF TO zcl_excel_autofilter. + DATA: lv_row_hidden TYPE abap_bool. + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, lv_row TYPE i, lv_col TYPE i, @@ -113,8 +124,9 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. * --- Retrieve SAP date format CLEAR ls_format. SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' - AND ddlanguage = sy-langu. + AND ( ddlanguage = sy-langu OR ddlanguage = 'E' ). ls_format-cmpname = 'DATE'. + ls_format-attvalue = ls_format-attvalue(10). " Ignore description, only use pattern CONDENSE ls_format-attvalue. CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. APPEND ls_format TO lt_format. @@ -151,11 +163,54 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. SORT lt_cell_data BY cell_row cell_column. + + IF skip_hidden_rows = abap_true. +* --- Retrieve autofilters (to identify hidden rows) + lo_autofilter = excel->get_autofilters_reference( )->get( io_worksheet = lo_worksheet ). + IF lo_autofilter IS NOT INITIAL. + lo_autofilter->get_filter_area( ). " trigger filter area validation + ENDIF. + ENDIF. + lv_row = 1. lv_col = 1. CLEAR lv_string. LOOP AT lt_cell_data ASSIGNING . +* --- Check, if row is hidden + AT NEW cell_row. + IF lo_autofilter IS NOT INITIAL. + lv_row_hidden = lo_autofilter->is_row_hidden( iv_row = -cell_row ). + ENDIF. + ENDAT. + +* --- Add empty rows + WHILE lv_row < -cell_row. + CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. + lv_row = lv_row + 1. + lv_col = 1. + ENDWHILE. + +* --- Skip hidden rows + IF lv_row_hidden = abap_true. + lv_row = -cell_row + 1. + lv_col = 1. + CONTINUE. + ENDIF. + +* --- Add empty columns + WHILE lv_col < -cell_column. + CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. + lv_col = lv_col + 1. + ENDWHILE. + +* --- Skip hidden columns + IF skip_hidden_columns = abap_true AND + lo_worksheet->get_column( ip_column = -cell_column )->get_visible( ) = abap_false. + lv_col = -cell_column + 1. + CONTINUE. + ENDIF. + * --- Retrieve Cell Style format and data type CLEAR ls_numfmt. IF -data_type IS INITIAL AND -cell_style IS NOT INITIAL. @@ -210,19 +265,6 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. ENDIF. " lv_attrname IS NOT INITIAL. ENDIF. " -data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. -* --- Add empty rows - WHILE lv_row < -cell_row. - CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. - lv_row = lv_row + 1. - lv_col = 1. - ENDWHILE. - -* --- Add empty columns - WHILE lv_col < -cell_column. - CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. - lv_col = lv_col + 1. - ENDWHILE. - * ----- Use format to determine the data type and display format. CASE -data_type. @@ -318,6 +360,16 @@ CLASS ZCL_EXCEL_WRITER_CSV IMPLEMENTATION. ENDMETHOD. + METHOD set_skip_hidden_rows. + skip_hidden_rows = ip_value. + ENDMETHOD. + + + METHOD set_skip_hidden_columns. + skip_hidden_columns = ip_value. + ENDMETHOD. + + METHOD zif_excel_writer~write_file. me->excel = io_excel. ep_file = me->create( ).