ABAP顾问
分类:
2010-09-03 15:39:03
REPORT z_barry_test NO STANDARD PAGE HEADING .
DATA: document_name(30) VALUE 'TESTDOI',
active_sheet(50) VALUE 'Sheet1'.
CONSTANTS inplace VALUE 'X'.
DATA: container TYPE REF TO cl_gui_custom_container,
control TYPE REF TO i_oi_container_control,
document TYPE REF TO i_oi_document_proxy,
spreadsheet TYPE REF TO i_oi_spreadsheet,
error TYPE REF TO i_oi_error,
errors TYPE REF TO i_oi_error OCCURS 0 WITH HEADER LINE.
DATA: rangeitem TYPE soi_range_item.
DATA: ranges TYPE soi_range_list.
DATA: excel_input TYPE soi_generic_table.
DATA: excel_input_wa TYPE soi_generic_item.
DATA: initialized(1), retcode TYPE soi_ret_string.
DATA: item_url(256), already_done, newname(40).
DATA document_type(80).
DATA: excel(80) VALUE 'Excel.Sheet'.
DATA: line_count TYPE i,
column_count TYPE i.
DATA: ok_code LIKE sy-ucomm.
PARAMETERS flag.
START-OF-SELECTION.
CALL SCREEN 100.
*&-------------------------------------------------------------------
*& Module OUTPUT_TO_EXCEL OUTPUT
*&-------------------------------------------------------------------
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
PERFORM create_basic_objects USING '' '' '' '' document_name.
PERFORM output_to_excel.
ENDMODULE. " OUTPUT_TO_EXCEL OUTPUT
*---------------------------------------------------------------------*
* FORM create_basic_objects *
*---------------------------------------------------------------------*
FORM create_basic_objects USING p_app_name
p_classname
p_classtype
p_obj_key
p_docname.
DATA l_app_name(200).
DATA: bds_instance TYPE REF TO cl_bds_document_set.
DATA: doc_signature TYPE sbdst_signature,
wa_doc_signature LIKE LINE OF doc_signature,
doc_components TYPE sbdst_components,
doc_uris TYPE sbdst_uri,
wa_doc_uris LIKE LINE OF doc_uris.
DATA: doc_classname TYPE sbdst_classname VALUE 'PICTURES',
doc_classtype TYPE sbdst_classtype VALUE 'OT',
doc_object_key TYPE sbdst_object_key VALUE 'ZEXCEL'.
CHECK initialized IS INITIAL.
CALL METHOD c_oi_container_control_creator=>get_container_control
IMPORTING
control = control
error = error.
CALL METHOD error->raise_message
EXPORTING
type = 'E'.
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'.
IF p_app_name IS INITIAL.
l_app_name = 'R/3 Reporter'.
ELSE.
l_app_name = p_app_name.
ENDIF.
CALL METHOD control->init_control
EXPORTING
r3_application_name = l_app_name
inplace_enabled = inplace
inplace_scroll_documents = 'X'
parent = container
register_on_close_event = 'X'
register_on_custom_event = 'X'
no_flush = 'X'
IMPORTING
error = errors.
APPEND errors.
CLEAR item_url.
IF NOT ( p_classname IS INITIAL OR p_classtype IS INITIAL
OR p_obj_key IS INITIAL ).
doc_classname = p_classname.
doc_classtype = p_classtype.
doc_object_key = p_obj_key.
ENDIF.
wa_doc_signature-prop_name = 'DESCRIPTION'.
document_type = excel.
wa_doc_signature-prop_value = p_docname.
APPEND wa_doc_signature TO doc_signature.
CREATE OBJECT bds_instance.
CALL METHOD bds_instance->get_info
EXPORTING
classname = doc_classname
classtype = doc_classtype
object_key = doc_object_key
CHANGING
components = doc_components
signature = doc_signature.
CALL METHOD bds_instance->get_with_url
EXPORTING
classname = doc_classname
classtype = doc_classtype
object_key = doc_object_key
CHANGING
uris = doc_uris
signature = doc_signature.
FREE bds_instance.
READ TABLE doc_uris INTO wa_doc_uris INDEX 1.
item_url = wa_doc_uris-uri.
* ask the SAP DOI container for a i_oi_document_proxy for Excel
CALL METHOD control->get_document_proxy
EXPORTING
document_type = 'Excel.Sheet'
no_flush = 'X'
IMPORTING
document_proxy = document
error = errors.
APPEND errors.
* open a document saved in business document service.
CALL METHOD document->open_document
EXPORTING
open_inplace = inplace
document_url = item_url.
DATA: has TYPE i.
CALL METHOD document->has_spreadsheet_interface
EXPORTING
no_flush = ''
IMPORTING
is_available = has
error = errors.
APPEND errors.
CALL METHOD document->get_spreadsheet_interface
EXPORTING
no_flush = ' '
IMPORTING
sheet_interface = spreadsheet
error = errors.
APPEND errors.
* Activate sheet
CALL METHOD spreadsheet->select_sheet
EXPORTING
name = active_sheet
no_flush = ''
IMPORTING
error = errors.
APPEND errors.
LOOP AT errors.
CALL METHOD errors->raise_message
EXPORTING
type = 'S'.
ENDLOOP.
FREE errors.
initialized = 'X'.
ENDFORM. " CREATE_BASIC_OBJECTS
*---------------------------------------------------------------------*
* FORM output_to_excel *
*---------------------------------------------------------------------*
FORM output_to_excel.
DATA: tmpdate(10) TYPE c.
column_count = 2.
line_count = 2.
PERFORM fill_cell USING line_count
column_count
'TEST1'.
line_count = line_count + 1.
PERFORM fill_cell USING line_count
column_count
'TEST2'.
column_count = column_count + 1.
ENDFORM. "output_to_excel
*---------------------------------------------------------------------*
* FORM fill_cell *
*---------------------------------------------------------------------*
FORM fill_cell USING i j val.
DATA: columns_number TYPE i,
rows_number TYPE i.
columns_number = 1.
rows_number = 1.
CALL METHOD spreadsheet->insert_range_dim
EXPORTING
name = 'cell'
no_flush = 'X'
top = i
left = j
rows = rows_number
columns = columns_number
IMPORTING
error = errors.
APPEND errors.
REFRESH: ranges, excel_input.
rangeitem-name = 'cell'.
rangeitem-columns = 1.
rangeitem-rows = 1.
APPEND rangeitem TO ranges.
excel_input_wa-column = 1.
excel_input_wa-row = 1.
excel_input_wa-value = val.
APPEND excel_input_wa TO excel_input.
* set data
CALL METHOD spreadsheet->set_ranges_data
EXPORTING
ranges = ranges
contents = excel_input
no_flush = 'X'
IMPORTING
error = errors.
APPEND errors.
CALL METHOD spreadsheet->fit_widest
EXPORTING
name = space
no_flush = 'X'.
REFRESH: ranges, excel_input.
ENDFORM. "fill_cell
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
IF NOT document IS INITIAL.
CALL METHOD document->close_document.
FREE document.
ENDIF.
IF NOT control IS INITIAL.
CALL METHOD control->destroy_control.
FREE control.
ENDIF.
SET SCREEN 0 .
ENDMODULE. " EXIT INPUT
chinaunix网友2010-10-27 11:12:02
根据程序应该能够看出来 普通的PAI和PBO Screen包含一个名为'CONTAINER'的CustomerControl