极简Excel导出

FORM frm_export_excel .
  DATA: lv_fname    TYPE string.
  DATA  lr_column   TYPE REF TO cl_salv_column.

  DEFINE set_name.
	lr_column = lr_columns->get_column( &1 ).
	lr_column->set_medium_text( &2 ).
  END-OF-DEFINITION.

  FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,       "内表结构
				 <dyn_wa> .                             "表头
  DATA: dy_table TYPE REF TO data,
		dy_line  TYPE REF TO data .                     "行

  IF it_output[] IS INITIAL.
	MESSAGE '没有需要下载的数据' TYPE 'S' DISPLAY LIKE 'E'.
	RETURN.
  ENDIF.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
	EXPORTING
	  it_fieldcatalog = it_fieldcat[]
	IMPORTING
	  ep_table        = dy_table.

  ASSIGN dy_table->* TO <dyn_table>.
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.


  LOOP AT it_output ASSIGNING FIELD-SYMBOL(<wa_alv>).
	MOVE-CORRESPONDING <wa_alv> TO <dyn_wa>.
	APPEND <dyn_wa> TO <dyn_table>.
  ENDLOOP.


  TRY.
	  CALL METHOD cl_salv_table=>factory
		IMPORTING
		  r_salv_table = DATA(lr_salv)
		CHANGING
		  t_table      = <dyn_table>.

	  lr_salv->get_columns( )->set_optimize( 'X' ).
	  lr_salv->get_functions( )->set_all( ).

	  DATA(lr_columns) = lr_salv->get_columns( ).
	  lr_columns->set_optimize( abap_true ).

	  LOOP AT it_fieldcat INTO DATA(ls_fieldcat).
		set_name  ls_fieldcat-fieldname  ls_fieldcat-scrtext_m .
	  ENDLOOP.

*      SET_NAME 'BMENG' '回复交货数量'.
*      SET_NAME 'UPDKZ' '修改类型(U/I)'.

*      DATA(LR_COLUMN) = LR_COLUMNS->GET_COLUMN( 'UPDKZ' ).
*      LR_COLUMN->SET_MEDIUM_TEXT( '修改类型(U/I)' ).

	CATCH cx_root.
	  MESSAGE '显示异常!' TYPE 'E'.
  ENDTRY.

*生成XML数据
  DATA(lv_xml) = lr_salv->to_xml( xml_type = '10' ).
*导出XML数据并生成XLSX文件
  lv_fname = |ZSDR019_销售订单创建平台{ sy-datum }_{ sy-uzeit }|.

  CALL FUNCTION 'XML_EXPORT_DIALOG'
	EXPORTING
	  i_xml                      = lv_xml
	  i_default_extension        = 'XLSX'
	  i_initial_directory        = ''
	  i_default_file_name        = lv_fname
	  i_mask                     = 'Excel (*.XLSX)|*.XLSX'
	EXCEPTIONS
	  application_not_executable = 1
	  OTHERS                     = 2.
  IF sy-subrc <> 0.
	MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
	WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.

posted on 2025-12-26 13:36  加西亚1986  阅读(1)  评论(0)    收藏  举报

导航