mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-04 20:28:22 +08:00

Added new class/method to wrap obsolete function GUID_CREATE and use replacement class SAP provides. Old function call still found in wrapper class commented out for use in older releases, which don't have the new methods from SAP yet ( 7.01 does not have it for example ) Replaced calls to function by calls to wrapper-method Changed calculation of last date in month in ZDEMO_CALENDAR since it was calling an obsoleted function as well.
413 lines
18 KiB
XML
413 lines
18 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<PROG NAME="ZDEMO_CALENDAR" VARCL="X" SUBC="1" RSTAT="T" RMAND="001" RLOAD="E" FIXPT="X" UCCHECK="X">
|
|
<textPool>
|
|
<language SPRAS="D">
|
|
<textElement ID="I" KEY="000" ENTRY="Ausrichtung" LENGTH="11 "/>
|
|
<textElement ID="I" KEY="001" ENTRY="KW" LENGTH="4 "/>
|
|
<textElement ID="I" KEY="002" ENTRY="Erzeugt mit abap2xlsx. Weitere Informationen unter http://abap2xlsx.org." LENGTH="100 "/>
|
|
<textElement ID="R" ENTRY="abap2xlsx Demo: Erzeugen eines Kalenders mit Bildern" LENGTH="70 "/>
|
|
<textElement ID="S" KEY="P_LANDS" ENTRY=" Querformat" LENGTH="18 "/>
|
|
<textElement ID="S" KEY="P_PORTR" ENTRY=" Hochformat" LENGTH="18 "/>
|
|
<textElement ID="S" KEY="P_FROM" ENTRY="D ." LENGTH="17 "/>
|
|
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="24 "/>
|
|
<textElement ID="S" KEY="P_TO" ENTRY="D ." LENGTH="15 "/>
|
|
</language>
|
|
<language SPRAS="E">
|
|
<textElement ID="I" KEY="000" ENTRY="Orientation" LENGTH="11 "/>
|
|
<textElement ID="I" KEY="001" ENTRY="CW" LENGTH="4 "/>
|
|
<textElement ID="I" KEY="002" ENTRY="Created with abap2xlsx. Find more information at http://abap2xlsx.org." LENGTH="100 "/>
|
|
<textElement ID="R" ENTRY="abap2xlsx Demo: Create Calendar with Pictures" LENGTH="45 "/>
|
|
<textElement ID="S" KEY="P_FROM" ENTRY="D ." LENGTH="17 "/>
|
|
<textElement ID="S" KEY="P_LANDS" ENTRY=" Landscape" LENGTH="17 "/>
|
|
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="24 "/>
|
|
<textElement ID="S" KEY="P_PORTR" ENTRY=" Portrait" LENGTH="16 "/>
|
|
<textElement ID="S" KEY="P_TO" ENTRY="D ." LENGTH="15 "/>
|
|
</language>
|
|
</textPool>
|
|
<source>*&---------------------------------------------------------------------*
|
|
*& Report ZDEMO_CALENDAR
|
|
*& abap2xlsx Demo: Create Calendar with Pictures
|
|
*&---------------------------------------------------------------------*
|
|
*& This report creates a monthly calendar in the specified date range.
|
|
*& Each month is put on a seperate worksheet. The pictures for each
|
|
*& month can be specified in a tab delimited file called "Calendar.txt"
|
|
*& which is saved in the Export Directory. By default this is the SAP
|
|
*& Workdir. The file contains 3 fields:
|
|
*&
|
|
*& Month (with leading 0)
|
|
*& Image Filename
|
|
*& Image Description
|
|
*& URL for the Description
|
|
*&
|
|
*& The Images should be landscape JPEG's with a 3:2 ratio and min.
|
|
*& 450 pixel height. They must also be saved in the Export Directory.
|
|
*& In my tests I've discovered a limit of 20 MB in the
|
|
*& cl_gui_frontend_services=>gui_download method. So keep your images
|
|
*& smaller or change to a server export using OPEN DATASET.
|
|
*&---------------------------------------------------------------------*
|
|
|
|
REPORT zdemo_calendar.
|
|
|
|
TYPE-POOLS: abap.
|
|
CONSTANTS: gc_save_file_name TYPE string VALUE 'Calendar.xlsx'.
|
|
INCLUDE zdemo_excel_outputopt_incl.
|
|
INCLUDE zdemo_calendar_classes.
|
|
|
|
DATA: lv_workdir TYPE string.
|
|
|
|
PARAMETERS: p_from TYPE dfrom DEFAULT '20130101',
|
|
p_to TYPE dto DEFAULT '20131231'.
|
|
|
|
SELECTION-SCREEN BEGIN OF BLOCK orientation WITH FRAME TITLE orient.
|
|
PARAMETERS: p_portr TYPE flag RADIOBUTTON GROUP orie,
|
|
p_lands TYPE flag RADIOBUTTON GROUP orie DEFAULT 'X'.
|
|
SELECTION-SCREEN END OF BLOCK orientation.
|
|
|
|
INITIALIZATION.
|
|
cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ).
|
|
cl_gui_cfw=>flush( ).
|
|
p_path = lv_workdir.
|
|
orient = 'Orientation'(000).
|
|
|
|
START-OF-SELECTION.
|
|
|
|
DATA: lo_excel TYPE REF TO zcl_excel,
|
|
lo_excel_writer TYPE REF TO zif_excel_writer,
|
|
lo_worksheet TYPE REF TO zcl_excel_worksheet,
|
|
lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime,
|
|
lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi,
|
|
hyperlink TYPE REF TO zcl_excel_hyperlink,
|
|
lo_drawing TYPE REF TO zcl_excel_drawing.
|
|
|
|
DATA: lo_style_month TYPE REF TO zcl_excel_style,
|
|
lv_style_month_guid TYPE zexcel_cell_style.
|
|
DATA: lo_style_border TYPE REF TO zcl_excel_style,
|
|
lo_border_dark TYPE REF TO zcl_excel_style_border,
|
|
lv_style_border_guid TYPE zexcel_cell_style.
|
|
DATA: lo_style_center TYPE REF TO zcl_excel_style,
|
|
lv_style_center_guid TYPE zexcel_cell_style.
|
|
|
|
DATA: lv_file TYPE xstring,
|
|
lv_bytecount TYPE i,
|
|
lt_file_tab TYPE solix_tab.
|
|
|
|
DATA: lv_full_path TYPE string,
|
|
image_descr_path TYPE string,
|
|
lv_file_separator TYPE c.
|
|
DATA: lv_content TYPE xstring,
|
|
width TYPE i,
|
|
lv_height TYPE i,
|
|
lv_from_row TYPE zexcel_cell_row.
|
|
|
|
DATA: month TYPE i,
|
|
month_nr TYPE fcmnr,
|
|
count TYPE i VALUE 1,
|
|
title TYPE zexcel_sheet_title,
|
|
value TYPE string,
|
|
image_path TYPE string,
|
|
date_from TYPE datum,
|
|
date_to TYPE datum,
|
|
row TYPE zexcel_cell_row,
|
|
to_row TYPE zexcel_cell_row,
|
|
to_col TYPE zexcel_cell_column_alpha,
|
|
to_col_end TYPE zexcel_cell_column_alpha,
|
|
to_col_int TYPE i.
|
|
|
|
DATA: month_names TYPE TABLE OF t247.
|
|
FIELD-SYMBOLS: <month_name> LIKE LINE OF month_names.
|
|
|
|
TYPES: BEGIN OF tt_datatab,
|
|
month_nr TYPE fcmnr,
|
|
filename TYPE string,
|
|
descr TYPE string,
|
|
url TYPE string,
|
|
END OF tt_datatab.
|
|
|
|
DATA: image_descriptions TYPE TABLE OF tt_datatab.
|
|
FIELD-SYMBOLS: <img_descr> LIKE LINE OF image_descriptions.
|
|
|
|
CONSTANTS: lv_default_file_name TYPE string VALUE 'Calendar', "#EC NOTEXT
|
|
c_from_row_portrait TYPE zexcel_cell_row VALUE 28,
|
|
c_from_row_landscape TYPE zexcel_cell_row VALUE 38,
|
|
from_col TYPE zexcel_cell_column_alpha VALUE 'C',
|
|
c_height_portrait TYPE i VALUE 450, " Image Height in Portrait Mode
|
|
c_height_landscape TYPE i VALUE 670, " Image Height in Landscape Mode
|
|
c_factor TYPE f VALUE '1.5'. " Image Ratio, default 3:2
|
|
|
|
IF p_path IS INITIAL.
|
|
p_path = lv_workdir.
|
|
ENDIF.
|
|
cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ).
|
|
CONCATENATE p_path lv_file_separator lv_default_file_name '.xlsx' INTO lv_full_path. "#EC NOTEXT
|
|
|
|
" Read Image Names for Month and Description
|
|
CONCATENATE p_path lv_file_separator lv_default_file_name '.txt' INTO image_descr_path. "#EC NOTEXT
|
|
cl_gui_frontend_services=>gui_upload(
|
|
EXPORTING
|
|
filename = image_descr_path " Name of file
|
|
filetype = 'ASC' " File Type (ASCII, Binary)
|
|
has_field_separator = 'X'
|
|
read_by_line = 'X' " File Written Line-By-Line to the Internal Table
|
|
CHANGING
|
|
data_tab = image_descriptions " Transfer table for file contents
|
|
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
|
|
).
|
|
IF sy-subrc <> 0.
|
|
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
|
|
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
|
|
ENDIF.
|
|
|
|
" Creates active sheet
|
|
CREATE OBJECT lo_excel.
|
|
|
|
" Create Styles
|
|
" Create an underline double style
|
|
lo_style_month = lo_excel->add_new_style( ).
|
|
" lo_style_month->font->underline = abap_true.
|
|
" lo_style_month->font->underline_mode = zcl_excel_style_font=>c_underline_single.
|
|
lo_style_month->font->name = zcl_excel_style_font=>c_name_roman.
|
|
lo_style_month->font->scheme = zcl_excel_style_font=>c_scheme_none.
|
|
lo_style_month->font->family = zcl_excel_style_font=>c_family_roman.
|
|
lo_style_month->font->bold = abap_true.
|
|
lo_style_month->font->size = 36.
|
|
lv_style_month_guid = lo_style_month->get_guid( ).
|
|
" Create border object
|
|
CREATE OBJECT lo_border_dark.
|
|
lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black.
|
|
lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin.
|
|
"Create style with border
|
|
lo_style_border = lo_excel->add_new_style( ).
|
|
lo_style_border->borders->allborders = lo_border_dark.
|
|
lo_style_border->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right.
|
|
lo_style_border->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top.
|
|
lv_style_border_guid = lo_style_border->get_guid( ).
|
|
"Create style alignment center
|
|
lo_style_center = lo_excel->add_new_style( ).
|
|
lo_style_center->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center.
|
|
lo_style_center->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top.
|
|
lv_style_center_guid = lo_style_center->get_guid( ).
|
|
|
|
" Get Month Names
|
|
CALL FUNCTION 'MONTH_NAMES_GET'
|
|
TABLES
|
|
month_names = month_names.
|
|
|
|
zcl_date_calculation=>months_between_two_dates(
|
|
EXPORTING
|
|
i_date_from = p_from
|
|
i_date_to = p_to
|
|
i_incl_to = abap_true
|
|
IMPORTING
|
|
e_month = month
|
|
).
|
|
|
|
date_from = p_from.
|
|
|
|
WHILE count <= month.
|
|
IF count = 1.
|
|
" Get active sheet
|
|
lo_worksheet = lo_excel->get_active_worksheet( ).
|
|
ELSE.
|
|
lo_worksheet = lo_excel->add_new_worksheet( ).
|
|
ENDIF.
|
|
|
|
lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected.
|
|
|
|
title = count.
|
|
value = count.
|
|
CONDENSE title.
|
|
CONDENSE value.
|
|
lo_worksheet->set_title( title ).
|
|
lo_worksheet->set_print_gridlines( abap_false ).
|
|
lo_worksheet->sheet_setup->paper_size = zcl_excel_sheet_setup=>c_papersize_a4.
|
|
lo_worksheet->sheet_setup->horizontal_centered = abap_true.
|
|
lo_worksheet->sheet_setup->vertical_centered = abap_true.
|
|
lo_col_dim = lo_worksheet->get_column_dimension( 'A' ).
|
|
lo_col_dim->set_width( '1.0' ).
|
|
lo_col_dim = lo_worksheet->get_column_dimension( 'B' ).
|
|
lo_col_dim->set_width( '2.0' ).
|
|
IF p_lands = abap_true.
|
|
lo_worksheet->sheet_setup->orientation = zcl_excel_sheet_setup=>c_orientation_landscape.
|
|
lv_height = c_height_landscape.
|
|
lv_from_row = c_from_row_landscape.
|
|
lo_worksheet->sheet_setup->margin_top = '0.10'.
|
|
lo_worksheet->sheet_setup->margin_left = '0.10'.
|
|
lo_worksheet->sheet_setup->margin_right = '0.10'.
|
|
lo_worksheet->sheet_setup->margin_bottom = '0.10'.
|
|
ELSE.
|
|
lo_col_dim = lo_worksheet->get_column_dimension( 'K' ).
|
|
lo_col_dim->set_width( '3.0' ).
|
|
lo_worksheet->sheet_setup->margin_top = '0.80'.
|
|
lo_worksheet->sheet_setup->margin_left = '0.55'.
|
|
lo_worksheet->sheet_setup->margin_right = '0.05'.
|
|
lo_worksheet->sheet_setup->margin_bottom = '0.30'.
|
|
lv_height = c_height_portrait.
|
|
lv_from_row = c_from_row_portrait.
|
|
ENDIF.
|
|
|
|
" Add Month Name
|
|
month_nr = date_from+4(2).
|
|
IF p_portr = abap_true.
|
|
READ TABLE month_names WITH KEY mnr = month_nr ASSIGNING <month_name>.
|
|
CONCATENATE <month_name>-ltx ` ` date_from(4) INTO value.
|
|
row = lv_from_row - 2.
|
|
to_col = from_col.
|
|
ELSE.
|
|
row = lv_from_row - 1.
|
|
to_col_int = zcl_excel_common=>convert_column2int( from_col ) + 32.
|
|
to_col = zcl_excel_common=>convert_column2alpha( to_col_int ).
|
|
to_col_int = to_col_int + 1.
|
|
to_col_end = zcl_excel_common=>convert_column2alpha( to_col_int ).
|
|
CONCATENATE month_nr '/' date_from+2(2) INTO value.
|
|
to_row = row + 2.
|
|
lo_worksheet->set_merge(
|
|
EXPORTING
|
|
ip_column_start = to_col " Cell Column Start
|
|
ip_column_end = to_col_end " Cell Column End
|
|
ip_row = row " Cell Row
|
|
ip_row_to = to_row " Cell Row
|
|
).
|
|
ENDIF.
|
|
lo_worksheet->set_cell(
|
|
EXPORTING
|
|
ip_column = to_col " Cell Column
|
|
ip_row = row " Cell Row
|
|
ip_value = value " Cell Value
|
|
ip_style = lv_style_month_guid
|
|
).
|
|
|
|
* to_col_int = zcl_excel_common=>convert_column2int( from_col ) + 7.
|
|
* to_col = zcl_excel_common=>convert_column2alpha( to_col_int ).
|
|
*
|
|
* lo_worksheet->set_merge(
|
|
* EXPORTING
|
|
* ip_column_start = from_col " Cell Column Start
|
|
* ip_column_end = to_col " Cell Column End
|
|
* ip_row = row " Cell Row
|
|
* ip_row_to = row " Cell Row
|
|
* ).
|
|
|
|
" Add drawing from a XSTRING read from a file
|
|
UNASSIGN <img_descr>.
|
|
READ TABLE image_descriptions WITH KEY month_nr = month_nr ASSIGNING <img_descr>.
|
|
IF <img_descr> IS ASSIGNED.
|
|
value = <img_descr>-descr.
|
|
IF p_portr = abap_true.
|
|
row = lv_from_row - 3.
|
|
ELSE.
|
|
row = lv_from_row - 2.
|
|
ENDIF.
|
|
IF NOT <img_descr>-url IS INITIAL.
|
|
hyperlink = zcl_excel_hyperlink=>create_external_link( <img_descr>-url ).
|
|
lo_worksheet->set_cell(
|
|
EXPORTING
|
|
ip_column = from_col " Cell Column
|
|
ip_row = row " Cell Row
|
|
ip_value = value " Cell Value
|
|
ip_hyperlink = hyperlink
|
|
).
|
|
ELSE.
|
|
lo_worksheet->set_cell(
|
|
EXPORTING
|
|
ip_column = from_col " Cell Column
|
|
ip_row = row " Cell Row
|
|
ip_value = value " Cell Value
|
|
).
|
|
ENDIF.
|
|
lo_row_dim = lo_worksheet->get_row_dimension( row ).
|
|
lo_row_dim->set_row_height( '22.0' ).
|
|
|
|
" In Landscape mode the row between the description and the
|
|
" dates should be not so high
|
|
IF p_lands = abap_true.
|
|
row = lv_from_row - 3.
|
|
lo_worksheet->set_cell(
|
|
EXPORTING
|
|
ip_column = from_col " Cell Column
|
|
ip_row = row " Cell Row
|
|
ip_value = ' ' " Cell Value
|
|
).
|
|
lo_row_dim = lo_worksheet->get_row_dimension( row ).
|
|
lo_row_dim->set_row_height( '7.0' ).
|
|
row = lv_from_row - 1.
|
|
lo_row_dim = lo_worksheet->get_row_dimension( row ).
|
|
lo_row_dim->set_row_height( '5.0' ).
|
|
ENDIF.
|
|
|
|
CONCATENATE p_path lv_file_separator <img_descr>-filename INTO image_path.
|
|
lo_drawing = lo_excel->add_new_drawing( ).
|
|
lo_drawing->set_position( ip_from_row = 1
|
|
ip_from_col = 'B' ).
|
|
|
|
lv_content = zcl_helper=>load_image( image_path ).
|
|
width = lv_height * c_factor.
|
|
lo_drawing->set_media( ip_media = lv_content
|
|
ip_media_type = zcl_excel_drawing=>c_media_type_jpg
|
|
ip_width = width
|
|
ip_height = lv_height ).
|
|
lo_worksheet->add_drawing( lo_drawing ).
|
|
ENDIF.
|
|
|
|
" Add Calendar
|
|
* CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
|
|
* EXPORTING
|
|
* day_in = date_from
|
|
* IMPORTING
|
|
* last_day_of_month = date_to.
|
|
date_to = date_from.
|
|
date_to+6(2) = '01'. " First of month
|
|
add 31 to date_to. " Somewhere in following month
|
|
date_to = date_to - date_to+6(2). " Last of month
|
|
IF p_portr = abap_true.
|
|
zcl_helper=>add_calendar(
|
|
EXPORTING
|
|
i_date_from = date_from
|
|
i_date_to = date_to
|
|
i_from_row = lv_from_row
|
|
i_from_col = from_col
|
|
i_day_style = lv_style_border_guid
|
|
i_cw_style = lv_style_center_guid
|
|
CHANGING
|
|
c_worksheet = lo_worksheet
|
|
).
|
|
ELSE.
|
|
zcl_helper=>add_calendar_landscape(
|
|
EXPORTING
|
|
i_date_from = date_from
|
|
i_date_to = date_to
|
|
i_from_row = lv_from_row
|
|
i_from_col = from_col
|
|
i_day_style = lv_style_border_guid
|
|
i_cw_style = lv_style_center_guid
|
|
CHANGING
|
|
c_worksheet = lo_worksheet
|
|
).
|
|
ENDIF.
|
|
count = count + 1.
|
|
date_from = date_to + 1.
|
|
ENDWHILE.
|
|
|
|
lo_excel->set_active_sheet_index_by_name( '1' ).
|
|
*** Create output
|
|
lcl_output=>output( lo_excel ).</source>
|
|
</PROG>
|