Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Output in Excel sheet.

former_member676613
Participant
0 Kudos

Hi All,

Please help me with detailed (program or example) how to get an of a output of a program in Excel sheet.

Thanks,

Chandresh

3 REPLIES 3

Former Member
0 Kudos

Hi,

Please check thread

Regards

Jana

satsrockford
Active Participant
0 Kudos

Hi,

I have done a program which downloads the output in the excel sheet in the correct format.

Just check the program. The code given in bold is what you have to use.

REPORT zexp MESSAGE-ID f4 LINE-SIZE 195.

Tables Used ***********************************

TABLES : bseg, bkpf, bsak, lfa1, payr .

*

Declaring Internal Tables **************************

DATA :

Internal table to hold header data *************

BEGIN OF header OCCURS 0,

ext_date(10) TYPE c,

delimit(1) TYPE c,

ext_time(8) TYPE c,

END OF header,

Internal table to hold detail info **************

BEGIN OF i_data OCCURS 0,

belnr LIKE bsak-belnr,

gjahr LIKE bsak-gjahr,

bukrs LIKE bsak-bukrs,

bldat LIKE bsak-bldat,

xblnr LIKE bsak-xblnr,

blart LIKE bsak-blart,

augdt LIKE bsak-augdt,

augbl LIKE bsak-augbl,

wrbtr LIKE bsak-wrbtr,

shkzg LIKE bsak-shkzg,

lifnr LIKE bsak-lifnr,

name1 LIKE lfa1-name1,

chect LIKE payr-chect,

status(1) TYPE c,

END OF i_data,

Internal table to to collect *****************

BEGIN OF i_data1 OCCURS 0,

belnr LIKE bsak-belnr,

gjahr LIKE bsak-gjahr,

bukrs LIKE bsak-bukrs,

bldat LIKE bsak-bldat,

xblnr LIKE bsak-xblnr,

blart LIKE bsak-blart,

augdt LIKE bsak-augdt,

augbl LIKE bsak-augbl,

wrbtr LIKE bsak-wrbtr,

shkzg LIKE bsak-shkzg,

lifnr LIKE bsak-lifnr,

name1 LIKE lfa1-name1,

sortl LIKE lfa1-sortl,

chect LIKE payr-chect,

status(1) TYPE c,

END OF i_data1,

String variables for formatting file data *************

fidoc_year TYPE string,

comp_code TYPE string,

check_numbr TYPE string,

vendor TYPE string,

inv_date TYPE string,

inv_nbr TYPE string,

paid_dat TYPE string,

inv_amt TYPE string,

status TYPE string,

ref_doc TYPE string,

************Internal table to store the file contents **************

BEGIN OF i_final_file OCCURS 0,

record(300) TYPE c,

END OF i_final_file,

Internal table to store the list of allowed document types ****

BEGIN OF i_doctype OCCURS 0,

blart LIKE bsak-blart,

END OF i_doctype,

Internal table to hold vendor information ************

BEGIN OF i_lfa1 OCCURS 0,

lifnr LIKE lfa1-lifnr,

name1 LIKE lfa1-name1,

sortl LIKE lfa1-sortl,

END OF i_lfa1,

Internal table to hold check information *************

BEGIN OF i_payr OCCURS 0,

chect LIKE payr-chect,

vblnr LIKE payr-vblnr,

gjahr LIKE payr-gjahr,

zbukr LIKE payr-zbukr,

END OF i_payr.

Data declarations **************************

DATA : ws_stblg TYPE bkpf-stblg,

todate TYPE bsak-augdt,

fromdate TYPE bsak-augdt,

w_day LIKE dtresr-weekday,

day LIKE scal-indicator,

d TYPE n,

e_date LIKE sy-datum,

e_time LIKE sy-uzeit,

dd(2) TYPE c,

mm(2) TYPE c,

yy(4) TYPE c,

hh(2) TYPE c,

min(2) TYPE c,

sec(2) TYPE c.

DATA : wa_filepath(50) TYPE c,

wa_filename(50) TYPE c,

wa_c_filename(100) TYPE c,

arch_path(50) TYPE c.

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

  • Data for downloading to list

DATA : list LIKE TABLE OF abaplist WITH HEADER LINE.

DATA : BEGIN OF list_asc OCCURS 0,

msg(300) TYPE c,

END OF list_asc.

DATA: BEGIN OF i_invoiceheader OCCURS 0,

name(30) TYPE c,

END OF i_invoiceheader.

RANGES dates FOR bkpf-budat.

Selection Screen ************************

SELECTION-SCREEN SKIP 2.

SELECT-OPTIONS:

s_bukrs FOR bkpf-bukrs ,

s_blart FOR bkpf-blart ,

s_augdt FOR bsak-augdt. " memory id todat TO fromdat.

PARAMETERS :submit AS CHECKBOX DEFAULT ' ' .

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

  • Download list to file.

AT USER-COMMAND.

CASE sy-ucomm.

WHEN 'LIST'.

PERFORM download.

WHEN 'BACK'.

EXIT.

ENDCASE.

----


FORM download *

-


........ *

-


FORM download.

if s_augdt is initial.

dates-sign = 'I'.

dates-option = 'BT'.

dates-low = '20050901'.

dates-high = '20050920'.

APPEND dates.

else.

dates = s_augdt.

append dates.

endif.

/* Submit the same program .

SUBMIT zexp WITH s_augdt IN dates

EXPORTING LIST TO MEMORY

AND RETURN.

CALL FUNCTION 'LIST_FROM_MEMORY'

TABLES

listobject = list

EXCEPTIONS

not_found = 1.

CALL FUNCTION 'LIST_TO_ASCI'

EXPORTING

LIST_INDEX = -1 "LIST_INDEX SY-LSIND.

TABLES

listasci = list_asc

listobject = list.

PERFORM download_file.

ENDFORM.

-


FORM download_file *

-


........ *

-


FORM download_file.

DATA fname TYPE rlgrap-filename VALUE 'c:\audit_report.xls'.

DATA ftype TYPE rlgrap-filetype VALUE 'DAT'.

DATA numeric_data(10) TYPE c VALUE '0123456789'.

*Table structure should match with list output.

DATA : BEGIN OF i_data1 OCCURS 0,

belnr(12) TYPE c,

gjahr(6) TYPE c,

bukrs(8) TYPE c,

chect(13) TYPE c,

lifnr(12) TYPE c,

name1(37) TYPE c,

bldat(14) TYPE c,

xblnr(18) TYPE c,

augdt(14) TYPE c,

wrbtr(17) TYPE c,

status(4) TYPE c,

augbl(18) TYPE c,

sortl(17) TYPE c,

END OF i_data1.

Header record of the excel sheet.

PERFORM fill_header.

LOOP AT list_asc.

Reads lines starting from the first record in the report. All informatory statements in the report are not read.

IF list_asc+1(10) CO numeric_data.

i_data1 = list_asc .

APPEND i_data1.

ENDIF.

ENDLOOP.

Call the download function.

CALL FUNCTION 'DOWNLOAD'

EXPORTING

filename = fname

filetype = ftype

TABLES

data_tab = i_data1

FIELDNAMES = i_invoiceheader.

ENDFORM.

-


FORM fill_header *

-


........ *

-


FORM fill_header.

i_invoiceheader-name = 'Doc Number'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Fsc Year'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Cmp Code'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Check No'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Vendor No'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Entered by'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Doc Date'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Ref Doc No'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Clearing Date'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Amount'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Status'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Clearing Doc No'.

APPEND i_invoiceheader.

i_invoiceheader-name = 'Sort field'.

APPEND i_invoiceheader.

ENDFORM. " fill_header

Initialization *************************

INITIALIZATION.

To initialize the date parameter on the selection screen.

The date by default ranges from previous Monday to Sunday.

todate = sy-datum.

CALL FUNCTION 'DATE_COMPUTE_DAY'

EXPORTING

date = todate

IMPORTING

day = day.

d = day.

if d < 4.

todate = sy-datum - d - 4 .

else.

todate = sy-datum - d + 3 .

endif.

fromdate = todate - 6.

MOVE: 'BT' TO s_augdt-option,

fromdate TO s_augdt-low,

todate TO s_augdt-high.

APPEND s_augdt.

Start of Selection **************************

START-OF-SELECTION.

Checking the validity of the inputted dates ****************

IF s_augdt-low > sy-datum OR s_augdt-high > sy-datum.

MESSAGE i999 WITH 'You cannot input future date'.

EXIT.

ENDIF.

IF NOT s_bukrs IS INITIAL.

MESSAGE i999 WITH 'Program will run with input parameters in screen!!'.

ENDIF.

Initialize the header data ***********************

e_time = sy-uzeit.

MOVE e_time+0(2) TO hh.

MOVE e_time+2(2) TO min.

MOVE e_time+4(2) TO sec.

CONCATENATE hh min sec INTO header-ext_time SEPARATED BY ':'.

e_date = sy-datum.

MOVE e_date+0(4) TO yy.

MOVE e_date+4(2) TO mm.

MOVE e_date+6(2) TO dd.

CONCATENATE mm dd yy INTO header-ext_date SEPARATED BY '/'.

header-delimit = '~'.

APPEND header.

List allowed document types **********************

PERFORM fill_doc_types.

**To select the documents within the range of week or as inputted **

IF s_augdt IS INITIAL.

MOVE: 'I' TO s_augdt-sign,

'BT' TO s_augdt-option,

fromdate TO s_augdt-low,

todate TO s_augdt-high.

APPEND s_augdt.

ENDIF.

Selecting the records from the database ****************

IF s_bukrs IS INITIAL AND s_blart IS INITIAL.

Select all documents of company code 1000, *********

4200 and 8000, and allowed document types *********

SELECT belnr gjahr augdt augbl bukrs

blart bldat xblnr lifnr wrbtr shkzg

FROM bsak INTO CORRESPONDING FIELDS OF TABLE i_data

FOR ALL ENTRIES IN i_doctype

WHERE blart EQ i_doctype-blart

AND augdt IN s_augdt

AND ( bukrs = '1000' OR bukrs ='4200' OR

( bukrs = '8000' AND blart NE 'ZP' ) ).

loop at i_data.

Exclude reversed documents

select single stblg into ws_stblg

from bkpf

where bukrs = i_data-bukrs

and gjahr = i_data-gjahr

and belnr = i_data-belnr.

if not ws_stblg is initial.

delete i_data.

endif.

endloop.

ELSEIF s_blart IS INITIAL.

Select all documents of allowed document types ******

and inputted company code ************

SELECT belnr gjahr augdt augbl bukrs

blart bldat xblnr lifnr wrbtr shkzg

FROM bsak INTO CORRESPONDING FIELDS OF TABLE i_data

FOR ALL ENTRIES IN i_doctype

WHERE blart EQ i_doctype-blart

AND augdt IN s_augdt

AND bukrs IN s_bukrs .

LOOP AT i_data.

Exclude documents of type ZP

for company code 8000.

IF i_data-bukrs = '8000' AND i_data-blart = 'ZP'.

DELETE i_data.

continue.

ENDIF.

Exclude reversed documents

select single stblg into ws_stblg

from bkpf

where bukrs = i_data-bukrs

and gjahr = i_data-gjahr

and belnr = i_data-belnr.

if not ws_stblg is initial.

delete i_data.

continue.

endif.

ENDLOOP.

READ TABLE i_data INDEX 1.

IF sy-subrc NE 0.

MESSAGE i999 WITH 'No records have been selected'.

EXIT.

ENDIF.

ELSE.

Select the documents matching the company codes *****

and document types inputted in the selection screen ****

SELECT belnr gjahr augdt augbl bukrs bldat xblnr

blart lifnr wrbtr shkzg

FROM bsak INTO CORRESPONDING FIELDS OF TABLE i_data

WHERE bukrs IN s_bukrs AND blart IN s_blart

AND augdt IN s_augdt.

SORT i_data BY blart.

LOOP AT i_data.

Filtering the records selected

based on the document type

READ TABLE i_doctype WITH KEY blart = i_data-blart.

IF sy-subrc NE 0.

DELETE i_data.

continue.

ENDIF.

Exclude documents of type ZP

for company code 8000.

IF i_data-bukrs = '8000' AND i_data-blart = 'ZP'.

DELETE i_data.

continue.

ENDIF.

Exclude reversed documents.

select single stblg into ws_stblg

from bkpf

where bukrs = i_data-bukrs

and gjahr = i_data-gjahr

and belnr = i_data-belnr.

if not ws_stblg is initial.

delete i_data.

continue.

endif.

ENDLOOP.

READ TABLE i_data INDEX 1.

IF sy-subrc NE 0.

MESSAGE i999 WITH 'No records have been selected'.

EXIT.

ENDIF.

ENDIF.

IF sy-subrc NE 0.

MESSAGE i999 WITH 'No records have been selected'.

EXIT.

ENDIF.

credit/debit identification ***********************

LOOP AT i_data.

IF i_data-shkzg EQ 'H'.

i_data-wrbtr = i_data-wrbtr * 1.

ELSEIF i_data-shkzg EQ 'S'.

i_data-wrbtr = i_data-wrbtr * -1.

ENDIF.

MODIFY i_data.

ENDLOOP.

for summarizing ******************************

LOOP AT i_data.

MOVE-CORRESPONDING i_data TO i_data1.

COLLECT i_data1.

ENDLOOP.

Vendor informations and Check Informations *****************

SELECT lifnr name1 sortl

FROM lfa1

APPENDING CORRESPONDING FIELDS OF TABLE i_lfa1

FOR ALL ENTRIES IN i_data1

WHERE lifnr = i_data1-lifnr.

SELECT chect vblnr gjahr zbukr FROM payr APPENDING CORRESPONDING

FIELDS OF TABLE i_payr FOR ALL ENTRIES

IN i_data1 WHERE vblnr = i_data1-augbl

AND gjahr = i_data1-augdt(4)

AND zbukr = i_data1-bukrs.

SORT i_data1 BY augbl gjahr bukrs lifnr.

SORT i_payr BY vblnr gjahr zbukr.

SORT i_lfa1 BY lifnr.

LOOP AT i_data1.

READ TABLE i_payr WITH KEY vblnr = i_data1-augbl

gjahr = i_data1-gjahr

zbukr = i_data1-bukrs.

IF sy-subrc EQ 0.

i_data1-chect = i_payr-chect.

ENDIF.

READ TABLE i_lfa1 WITH KEY lifnr = i_data1-lifnr.

IF sy-subrc EQ 0.

i_data1-name1 = i_lfa1-name1.

i_data1-sortl = i_lfa1-sortl.

ENDIF.

i_data1-status = 'X'.

MODIFY i_data1.

ENDLOOP.

**The records are sorted by clearing date, check number and doc type**

SORT i_data1 BY augdt chect blart.

**********The header record is outputted on the screen****************

PERFORM write_header.

********Data is moved to internal table in the file format *************

PERFORM move_data.

Line items are outputted on the screen *********************

PERFORM write_output.

*&----


&*

*& Form write_header &*

*&----


&*

*& This outputs the header information to screen &*

*&----


&*

FORM write_header.

SKIP.

SET PF-STATUS 'LIST'.

Outputting the header information *********************

WRITE : / 'Extraction Date : ' , header-ext_date.

WRITE : / 'Extraction Time : ' , header-ext_time.

FORMAT COLOR 1." INTENSIFIED.

SKIP.

ULINE AT 0(190) NO-GAP.

Outputting line level information **********************

WRITE:/ sy-vline NO-GAP,

(10) 'DOC NUMBER',

sy-vline NO-GAP,

(4) 'F-YR',

sy-vline NO-GAP,

(6) 'C-CODE',

sy-vline NO-GAP,

(10) 'CHECK NUM',

sy-vline NO-GAP,

(10) 'VENDOR NUM',

sy-vline NO-GAP,

(35) 'VENDOR NAME',

sy-vline NO-GAP,

(12) 'INVOICE DATE',

sy-vline NO-GAP,

(16) 'INVOICE NUMBER',

sy-vline NO-GAP,

(12) 'PAID DATE',

sy-vline NO-GAP,

(15) 'INVOICE AMOUNT',

sy-vline NO-GAP,

(2) 'SC',

sy-vline NO-GAP,

(16) 'REFERENCE FI DOC',

sy-vline NO-GAP,

(15) 'SORT FIELD',

sy-vline NO-GAP.

ULINE AT 0(190) NO-GAP.

ENDFORM. " write_header

*&----


&*

*& FORM MOVE_DATA &*

*&----


&*

*& Formats data in internal table as is required in the file &*

*&----


&*

FORM move_data.

LOOP AT i_data1.

Document number and fiscal year should be separted by '|' *****

CONCATENATE i_data1-belnr i_data1-gjahr INTO fidoc_year

SEPARATED BY '|'.

MOVE i_data1-bukrs TO comp_code.

MOVE i_data1-chect TO check_numbr.

Vendor number and vendor name should be separted by '|' *****

CONCATENATE i_data1-lifnr i_data1-name1 INTO vendor

SEPARATED BY '|'.

SHIFT vendor LEFT DELETING LEADING '0'.

SHIFT vendor RIGHT DELETING TRAILING space.

Date fields converted to MM/DD/YYYY format ****************

MOVE i_data1-bldat+0(4) TO yy.

MOVE i_data1-bldat+4(2) TO mm.

MOVE i_data1-bldat+6(2) TO dd.

CONCATENATE mm dd yy INTO inv_date SEPARATED BY '/'.

MOVE i_data1-xblnr TO inv_nbr.

SHIFT inv_nbr RIGHT DELETING TRAILING space.

MOVE i_data1-augdt+0(4) TO yy.

MOVE i_data1-augdt+4(2) TO mm.

MOVE i_data1-augdt+6(2) TO dd.

CONCATENATE mm dd yy INTO paid_dat SEPARATED BY '/'.

MOVE i_data1-wrbtr TO inv_amt.

CONDENSE inv_amt.

SHIFT inv_amt RIGHT DELETING TRAILING space.

MOVE i_data1-status TO status.

MOVE i_data1-augbl TO ref_doc.

CONCATENATE fidoc_year

comp_code

check_numbr

vendor

inv_date

inv_nbr

paid_dat

inv_amt

status

ref_doc

INTO i_final_file-record SEPARATED BY '~'.

APPEND i_final_file.

ENDLOOP.

ENDFORM. " MOVE_DATA

*&----


&*

*& Form write_output &*

*&----


&*

*& Outputs all data to screen &*

*&----


&*

FORM write_output.

LOOP AT i_data1.

FORMAT COLOR 2 INTENSIFIED.

Outputting line level information *******************

WRITE : / sy-vline NO-GAP,

(10) i_data1-belnr,

sy-vline NO-GAP,

(4) i_data1-gjahr,

sy-vline NO-GAP,

(6) i_data1-bukrs,

sy-vline NO-GAP,

(10) i_data1-chect,

sy-vline NO-GAP,

(10) i_data1-lifnr,

sy-vline NO-GAP,

(35) i_data1-name1,

sy-vline NO-GAP,

(12) i_data1-bldat MM/DD/YYYY,

sy-vline NO-GAP,

(16) i_data1-xblnr,

sy-vline NO-GAP,

(12) i_data1-augdt MM/DD/YYYY,

sy-vline NO-GAP,

(15) i_data1-wrbtr,

sy-vline NO-GAP,

(2) i_data1-status,

sy-vline NO-GAP,

(16) i_data1-augbl,

sy-vline NO-GAP,

(15) i_data1-sortl,

sy-vline NO-GAP.

ENDLOOP.

ULINE AT 0(190) NO-GAP.

ENDFORM. " write_output

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

In the program, I am downloading only the list.. The description of report outputted in the beginning of the report is not downloaded to excel.

What has to be taken into consideration is that, the structure of the table i_data1 which contains the data to be downloaded to the table.

check this link

http://www.sap-img.com/abap/download-to-excel-with-format-border-color-cell-etc.htm

I hope that this will help you.

Regards,

Satish

former_member676613
Participant
0 Kudos

thanks