0% found this document useful (0 votes)
350 views10 pages

Report Abap Alv

This document contains code for generating an Excel spreadsheet from sales data in an internal table. It initializes data structures, populates the internal table with sample sales data, then uses the OpenInterface API to: 1. Create an Excel workbook and add sheets 2. Add header and data ranges to the sheets 3. Populate the ranges by inserting the internal table data 4. Format fonts, colors, etc. 5. Save the workbook The code handles tasks like determining data type alignments and calculating offsets to properly insert structured data into the ranges.

Uploaded by

David Roque
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
350 views10 pages

Report Abap Alv

This document contains code for generating an Excel spreadsheet from sales data in an internal table. It initializes data structures, populates the internal table with sample sales data, then uses the OpenInterface API to: 1. Create an Excel workbook and add sheets 2. Add header and data ranges to the sheets 3. Populate the ranges by inserting the internal table data 4. Format fonts, colors, etc. 5. Save the workbook The code handles tasks like determining data type alignments and calculating offsets to properly insert structured data into the ranges.

Uploaded by

David Roque
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 10

REPORT Y_LALP_OLE_XLS Message-id ym. .

DATA
DATA
DATA
DATA
DATA
DATA

zjnccontainer TYPE REF TO cl_gui_custom_container.


zjnccontrol TYPE REF TO i_oi_container_control.
zjncdocument TYPE REF TO i_oi_document_proxy.
zjncspreadsheet TYPE REF TO i_oi_spreadsheet.
zjncerror TYPE REF TO i_oi_error.
zjncretcode TYPE SOI_RET_STRING.

DATA zjncexcelsheet TYPE soi_document_type VALUE


SOI_DOCTYPE_EXCEL_SHEET.
DATA: zjnc_ok_code LIKE sy-ucomm," return code from screen
zjnc_repid LIKE sy-repid.
DATA spreadsheetintf TYPE REF TO i_oi_spreadsheet.
DATA documentintf TYPE REF TO i_oi_document_proxy.
DATA pivotintf TYPE REF TO i_oi_pivot.
DATA: numRows type I,
maxRows
type I.
DATA: usa_sales TYPE i VALUE 1000,
europe_sales TYPE i VALUE 2000,
japan_sales TYPE i VALUE 1000,
asia_sales TYPE i VALUE 100,
america_sales TYPE i VALUE 100,
africa_sales TYPE i VALUE 100.
DATA: BEGIN OF head_table Occurs 0,
hd_region(10),
hd_sales(10),
hd_date(10),
hd_time(10),
hd_weight(10),
hd_amount(10),
hd_id(10),
END OF head_table.
DATA: BEGIN OF sales_table Occurs 0,
region(60),
sales TYPE i,
date TYPE d,
time TYPE t,
weight TYPE f,
amount TYPE p DECIMALS 3,
id(10) TYPE n,
END OF sales_table.
DATA: ind TYPE i.
Data: Begin of WA_PIVOT,
region(60),
date TYPE d,
amount TYPE p DECIMALS 3,
End of WA_PIVOT.
* Qty Internal Table for Date-wise Plant-Wise
Data: IT_PIVOT Like Sorted Table Of WA_PIVOT With Header Line

With Unique Key region date.


Data: DT_PIVOT Like Table Of WA_PIVOT With Header Line.
Data: IT_ITEMS type SOI_NAMETYPE_TABLE.
Data: WA_ITEMS like line of IT_ITEMS.
DATA: WA_NAMECOL TYPE SOI_NAMECOL_ITEM.
DATA: NAMECOL TYPE SOI_NAMECOL_TABLE.
DATA: WA_FIELD LIKE RFC_FIELDS.
DATA: FIELDS_TABLE TYPE TABLE OF RFC_FIELDS.
DATA:
DATA:
DATA:
DATA:

OFFSET LIKE RFC_FIELDS-OFFSET VALUE 0.


N TYPE I.
POS TYPE I VALUE 1.
ALIGNMENT TYPE I.

call screen 0100.


CLEAR: sales_table.
sales_table-region = 'America'(ame).
sales_table-sales = america_sales.
APPEND sales_table.
sales_table-region = 'Africa'(afr).
sales_table-sales = africa_sales.
APPEND sales_table.
sales_table-region = 'USA'(usa).
sales_table-sales = usa_sales.
APPEND sales_table.
sales_table-region = 'Europe'(eur).
sales_table-sales = europe_sales.
APPEND sales_table.
sales_table-region = 'Japan'(jap).
sales_table-sales = japan_sales.
APPEND sales_table.
sales_table-region = 'Asia'(asi).
sales_table-sales = asia_sales.
APPEND sales_table.
LOOP AT sales_table.
ind = sy-tabix.
sales_table-date = sy-datum + ind.
sales_table-time = sy-uzeit + ind.
sales_table-weight = 100000 * ind.
sales_table-amount = 11111 * ind.
sales_table-id = ind.
MODIFY sales_table.
ENDLOOP.

Describe Table sales_table Lines numRows.


LOOP AT sales_table.
Move sales_table-region to WA_PIVOT-region.
Move sales_table-date
to WA_PIVOT-date.
Move sales_table-amount to WA_PIVOT-amount.
Collect WA_PIVOT Into IT_PIVOT.
ENDLOOP.
DT_PIVOT[] = IT_PIVOT[].
*
* CALL FUNCTION 'ZJNC_START_EXCEL'
*
IMPORTING
*
SPREADSHEETINTF
= SPREADSHEETINTF
*
DOCUMENTINTF
= DOCUMENTINTF.
CALL METHOD zjncdocument->get_pivot_interface
EXPORTING
no_flush
= ' '
IMPORTING
pivot_interface = pivotintf
error
= zjncerror
retcode
= zjncretcode.
* If zjncretcode <> c_oi_errors=>ret_ok.
*
CALL METHOD c_oi_errors=>raise_message
*
EXPORTING type = 'E'.
* EndIf.
If pivotintf Is Initial.
message e999 with 'NULL pivot interface'.
EndIf.
* PERFORM DYN_ANALYSE_SINGLE TABLES
FIELDS_TABLE
*
USING
DT_PIVOT
*
CHANGING POS N OFFSET ALIGNMENT.
WA_NAMECOL-NAME =
WA_NAMECOL-COLUMN
APPEND WA_NAMECOL
WA_NAMECOL-NAME =
WA_NAMECOL-COLUMN
APPEND WA_NAMECOL
WA_NAMECOL-NAME =
WA_NAMECOL-COLUMN
APPEND WA_NAMECOL

'REGION'.
= '1'.
TO NAMECOL.
'DATE'.
= '2'.
TO NAMECOL.
'AMOUNT'.
= '3'.
TO NAMECOL.

LOOP AT NAMECOL INTO WA_NAMECOL.


READ TABLE FIELDS_TABLE INTO WA_FIELD INDEX WA_NAMECOL-COLUMN.
IF SY-SUBRC EQ 0.
WA_FIELD-FIELDNAME = WA_NAMECOL-NAME.
MODIFY FIELDS_TABLE INDEX WA_NAMECOL-COLUMN FROM WA_FIELD.
ENDIF.
ENDLOOP.
Move 'REGION' to WA_ITEMS-name.
Move i_oi_pivot=>rowfield to WA_ITEMS-type.
Append WA_ITEMS to IT_ITEMS.
Move 'DATE' to WA_ITEMS-name.
Move i_oi_pivot=>columnfield to WA_ITEMS-type.

Append WA_ITEMS to IT_ITEMS.


Move 'AMOUNT' to WA_ITEMS-name.
Move i_oi_pivot=>datafield to WA_ITEMS-type.
Append WA_ITEMS to IT_ITEMS.
* CALL METHOD pivotintf->set_source_table
*
EXPORTING data_table = DT_PIVOT[]
*
fields_table = FIELDS_TABLE[]
*
name
= 'PlanningPivot'
*
items
= IT_ITEMS[]
*
IMPORTING error
= zjncerror
*
retcode
= zjncretcode.
*
CLEAR: head_table.
Head_Table-hd_region = 'Region'.
Head_Table-hd_sales = 'Sales'.
Head_Table-hd_date = 'Date'.
Head_Table-hd_time = 'Time'.
Head_Table-hd_weight = 'Weight in MT'.
Head_Table-hd_amount = 'Value in Rupees'.
Head_Table-hd_id = 'Sytem ID'.
Append Head_Table.
Head_Table-hd_region = 'Region'.
Head_Table-hd_sales = 'Sales'.
Head_Table-hd_date = 'Date'.
Head_Table-hd_time = 'Time'.
Head_Table-hd_weight = 'Weight in MT'.
Head_Table-hd_amount = 'Value in Rupees'.
Head_Table-hd_id = 'Sytem ID'.
Append Head_Table.
Head_Table-hd_region = 'Region'.
Head_Table-hd_sales = 'Sales'.
Head_Table-hd_date = 'Date'.
Head_Table-hd_time = 'Time'.
Head_Table-hd_weight = 'Weight in MT'.
Head_Table-hd_amount = 'Value in Rupees'.
Head_Table-hd_id = 'Sytem ID'.
Append Head_Table.
CALL METHOD zjncspreadsheet->add_sheet
EXPORTING name
= 'Sheet ONE'
no_flush = ' '
IMPORTING error
= zjncerror
retcode = zjncretcode.
maxRows = 1.
* CALL FUNCTION 'ZJNC_ADD_RANGE'
*
EXPORTING
*
PRANGE
= 'HeadRange1'
*
STARTROW
= maxRows
*
STARTCOL
= 1

*
*
*
*

NUMROWS
NUMCOLS
PSHEET
SPREADSHEETINTF

=
=
=
=

1
7
'Sheet ONE'
spreadsheetintf.

Move SY-REPID to zjnc_repid.


CALL METHOD zjncspreadsheet->select_sheet
EXPORTING name
= 'Sheet ONE'
no_flush = ' '
IMPORTING error
= zjncerror
retcode = zjncretcode.
CALL METHOD zjncspreadsheet->set_selection
EXPORTING top
= maxRows
left
= 7
rows
= 1
columns = 1
no_flush = ' '
IMPORTING error
= zjncerror
retcode = zjncretcode.
CALL METHOD zjncspreadsheet->insert_range
EXPORTING name
= 'HeadRange1'
rows
= maxRows
columns = 7
no_flush = ' '
IMPORTING error
= zjncerror
retcode = zjncretcode.
*
** In ABAP Objects, you can only declare tables without headers.
** Hence sales_table[] ensures Header is Stripped
*
* CALL FUNCTION 'ZJNC_ADD_TABLE'
*
EXPORTING
*
PTABLE
= head_table[]
*
PRANGE
= 'HeadRange1'
**
PSIZE
= -1
*
PBOLD
= 1
**
PITALIC
= -1
**
PALIGN
= -1
**
PFRONT
= -1
**
PBACK
= -1
**
PFORMAT
= 'NA'
*
SPREADSHEETINTF
= spreadsheetintf.
DATA: zjnc_fields_table Type TABLE OF rfc_fields.
DATA: zjncwa_zjnc_fields_table TYPE rfc_fields.
Move SY-REPID to zjnc_repid.
CALL FUNCTION 'DP_GET_FIELDS_FROM_TABLE'
TABLES
data = head_table[]
fields = zjnc_fields_table.
CALL METHOD zjncspreadsheet->insert_one_table
EXPORTING
*
ddic_name
= ddic_name

data_table
fields_table
rangename
wholetable
no_flush
IMPORTING error
retcode

=
=
=
=
=
=
=

head_table[]
zjnc_fields_table
'HeadRange1'
'X'
' '
zjncerror
zjncretcode.

CALL METHOD zjncspreadsheet->set_font


EXPORTING rangename = 'HeadRange1'
family
= 'Arial'
size
= -1
bold
= 1
italic
= -1
align
= -1
no_flush = ' '
IMPORTING error
= zjncerror
retcode = zjncretcode.
CALL METHOD zjncspreadsheet->set_color
EXPORTING rangename = 'HeadRange1'
front
= -1
back
= -1
no_flush = ' '
IMPORTING error
= zjncerror
retcode = zjncretcode.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
**
*
**
**
*
**
**
*
*
**
*
*
*
*

Add 1 to maxrows.
Describe Table sales_table Lines numRows.
CALL FUNCTION 'ZJNC_ADD_RANGE'
EXPORTING
PRANGE
= 'DataRange1'
STARTROW
= maxRows
STARTCOL
= 1
NUMROWS
= numRows
NUMCOLS
= 7
PSHEET
= 'Sheet ONE'
SPREADSHEETINTF
= spreadsheetintf.
CALL FUNCTION 'ZJNC_ADD_TABLE'
EXPORTING
PTABLE
= sales_table[]
PRANGE
= 'DataRange1'
PSIZE
= -1
PBOLD
= 0
PITALIC
= -1
PALIGN
= -1
PFRONT
= 3
PBACK
= -1
PFORMAT
= 'NA'
SPREADSHEETINTF
= spreadsheetintf.
Start NewSheet on TOP
Move 1 to maxRows.
CALL FUNCTION 'ZJNC_ADD_SHEET'
EXPORTING

*
*
*
*
*
*
*
*
*
*
*
*
*
**
**
*
*
*
*
*
**
*
**
**
**
**
**
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
**
*
**
**
*
*
**
*

PSHEET
SPREADSHEETINTF

= 'Sheet TWO'
= spreadsheetintf.

CALL FUNCTION 'ZJNC_ADD_RANGE'


EXPORTING
PRANGE
= 'HeadRange2'
STARTROW
= maxRows
STARTCOL
= 1
NUMROWS
= 1
NUMCOLS
= 7
PSHEET
= 'Sheet TWO'
SPREADSHEETINTF
= spreadsheetintf.
In ABAP Objects, you can only declare tables without headers.
Hence sales_table[] ensures Header is Stripped
CALL FUNCTION 'ZJNC_ADD_TABLE'
EXPORTING
PTABLE
= head_table[]
PRANGE
= 'HeadRange2'
PSIZE
= -1
PBOLD
= 1
PITALIC
= -1
PALIGN
= -1
PFRONT
= -1
PBACK
= -1
PFORMAT
= 'NA'
SPREADSHEETINTF
= spreadsheetintf.
Add 1 to maxrows.
CALL FUNCTION 'ZJNC_ADD_RANGE'
EXPORTING
PRANGE
= 'DataRange2'
STARTROW
= maxRows
STARTCOL
= 1
NUMROWS
= numRows
NUMCOLS
= 7
PSHEET
= 'Sheet TWO'
SPREADSHEETINTF
= spreadsheetintf.
CALL FUNCTION 'ZJNC_ADD_TABLE'
EXPORTING
PTABLE
= sales_table[]
PRANGE
= 'DataRange2'
PSIZE
= -1
PBOLD
= 0
PITALIC
= -1
PALIGN
= -1
PFRONT
= 55
PBACK
= 6
PFORMAT
= 'NA'
SPREADSHEETINTF
= spreadsheetintf.

*break-point.
CALL METHOD zjncdocument->save_as
EXPORTING file_name = 'C:\@ALombardi\ejm.xls'.
* CALL FUNCTION 'POPUP_TO_INFORM'

*
*
*
*

EXPORTING
titel = sy-repid
txt2 = 'See EXCEL & SAVE if Needed'
txt1 = 'Jai Hind ....'.

*&---------------------------------------------------------------------*
*&
Form GET_ALIGNMENT
*&---------------------------------------------------------------------*
FORM GET_ALIGNMENT USING P_TYP
CHANGING ALIGNBASE.
ALIGNBASE = 1.
CASE P_TYP.
*FLOAT VALUE NEEDS 8 BYTE ALIGNMENT
WHEN 'F'.
ALIGNBASE = 8.
*SHORT INTEGER NEEDS 2 BYTE ALIGNMENT
WHEN 's'.
ALIGNBASE = 2.
*LONG INTEGER NEEDS 4 BYTE ALIGNMENT
WHEN 'I'.
ALIGNBASE = 4.
*ALL OTHER TYPES ARE BYTE ALIGNED
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form OFFSET_CORRECTION
*&---------------------------------------------------------------------*
FORM OFFSET_CORRECTION USING P_TYP ALIGNBASE
CHANGING P_FIELDS_OFFSET.
DATA : MODRESULT TYPE I.
DATA : ADDOFFSET TYPE I.
DATA : THISALIGNBASE TYPE I.
IF P_TYP NE ' '.
PERFORM GET_ALIGNMENT USING P_TYP CHANGING THISALIGNBASE.
ELSE.
THISALIGNBASE = ALIGNBASE.
ENDIF.
IF THISALIGNBASE NE 1.
* If the reminder of mod operation is not equal 0 we have to adjust
* the offset
MODRESULT = P_FIELDS_OFFSET MOD THISALIGNBASE.
IF MODRESULT NE 0.
ADDOFFSET = THISALIGNBASE - MODRESULT.
P_FIELDS_OFFSET = P_FIELDS_OFFSET + ADDOFFSET.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
module STATUS_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.

*
*
*
*

IF zjncdocument IS NOT INITIAL.


RETURN.
EndIf.
Perform ZJNC_INIT_EXCEL.
Leave to Screen 0.

endmodule." STATUS_0100 OUTPUT


*&---------------------------------------------------------------------*
*&
Form ZJNC_INIT_EXCEL
*&---------------------------------------------------------------------*
Form ZJNC_INIT_EXCEL.
CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING control = zjnccontrol
error = zjncerror.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = zjnc_repid
txt2 = 'Create OLE zjnccontrol Failed'
txt1 = 'to make Excel zjnccontrol'.
Leave Program.
ENDIF.
CREATE OBJECT zjnccontainer
EXPORTING
CONTAINER_NAME = 'MYCONTROL'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5.
*

IF sy-subrc NE 0.
add your handling
ENDIF.
CALL METHOD zjnccontrol->init_control
EXPORTING r3_application_name
inplace_enabled
inplace_scroll_documents
parent
register_on_close_event
register_on_custom_event
no_flush
IMPORTING error = zjncerror.

=
=
=
=
=
=
=

'R/3 Basis'"#EC NOTEXT


'X'
'X'
zjnccontainer
'X'
'X'
'X'

IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = zjnc_repid
txt2 = 'INIT OLE zjnccontrol Failed'
txt1 = 'to init Excel zjnccontrol'.
Leave Program.
ENDIF.

CALL METHOD zjnccontrol->get_document_proxy


EXPORTING document_type
= zjncexcelsheet
*
document_format
= document_format
*
register_container = register_container
no_flush
= ' '
IMPORTING document_proxy
= zjncdocument
retcode
= zjncretcode
error
= zjncerror.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = zjnc_repid
txt2 = 'Create zjncdocument PROXY Failed'
txt1 = 'to make Excel zjncdocument'.
Leave Program.
ENDIF.

*
*
*

CALL METHOD zjncdocument->create_document


EXPORTING open_inplace
= ' '
create_view_data = create_view_data
onsave_macro
= onsave_macro
startup_macro
= startup_macro
document_title = 'JNC'
no_flush
= ' '
IMPORTING error
= zjncerror
retcode
= retcode
.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = zjnc_repid
txt2 = 'Create zjncdocument Failed'
txt1 = 'to make Excel zjncdocument'.
Leave Program.
ENDIF.
CALL METHOD zjncdocument->get_spreadsheet_interface
EXPORTING no_flush
= ' '
IMPORTING sheet_interface = zjncspreadsheet
error
= zjncerror
retcode
= zjncretcode.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = zjnc_repid
txt2 = 'Create zjncspreadsheet INTERFACE Failed'
txt1 = 'to make Excel zjncspreadsheet'.
Leave Program.
ENDIF.

ENDFORM." ZJNC_INIT_EXCEL

You might also like