1:编写公共的include
include ZGNPUBI000
include 实现:
types:begin of g_line,
row(4096) type c,
end of g_line.
types:g_field(1024) type c.
types:g_lines type table of g_line initial size 100.
types:tt_chart type table of bapi_char.
data:g_workbook type ole2_object,
g_app type ole2_object.
data:g_sheet1 type ole2_object.
data: has_data type c.
*DATA: tabulator TYPE c.
*DATA: tabulator_hex(2) TYPE x VALUE 9.
data:g_title1(72) type c value '开始导出...'.
data:g_referr type ref to cx_root.
data:lt_chart type table of bapi_char.
data:lt_fcat type lvc_t_fcat.
data:lf_data type ref to data.
data:l_ref type ref to data.
data:l_tabnm type dd02l-tabname.
data:l_fldnm type fieldname.
field-symbols:<lt_fs> type standard table.
data:lt_asc type g_lines .
*&---------------------------------------------------------------------*
*& Form FM_GET_CONV_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form fm_get_conv_data.
* CLEAR:tabulator_hex,tabulator.
* CALL METHOD cl_abap_conv_in_ce=>uccp
* EXPORTING
* uccp = tabulator_hex
* RECEIVING
* char = tabulator.
endform. "FM_GET_CONV_DATA
*&---------------------------------------------------------------------*
*& Form fm_get_workbook
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_APP text
* -->P_WORKBOOK text
*----------------------------------------------------------------------*
form fm_get_workbook changing p_app type ole2_object
p_workbook type ole2_object.
data: h_app type ole2_object,
h_temp type ole2_object."temporary variat .
clear p_workbook.
create object p_app 'Excel.Application' .
set property of p_app 'DisplayAlerts' = 0.
* SET PROPERTY OF p_app 'Visible' = 1.
call method of
p_app
'Workbooks' = h_temp.
call method of
h_temp
'Add' = p_workbook.
endform. "fm_init_ole2
*&---------------------------------------------------------------------*
*& Form fm_show_progress
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LINE text
* -->P_TITLE text
*----------------------------------------------------------------------*
form fm_show_progress using p_line p_title.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = p_line
text = p_title.
endform. "fm_show_PROGRESS
*&---------------------------------------------------------------------*
*& Form fm_show_app
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WORKBOOK text
*----------------------------------------------------------------------*
form fm_show_app using p_workbook type ole2_object.
data:h_temp type ole2_object."temporary variat
check p_workbook is not initial.
get property of p_workbook 'Application' = h_temp.
* CALL METHOD OF h_temp 'Close'.
set property of h_temp 'Visible' = 1.
endform. " FM_SHOW_APP
*&---------------------------------------------------------------------*
*& Form fm_close_app
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WORKBOOK text
*----------------------------------------------------------------------*
form fm_close_app using p_workbook type ole2_object.
data:h_temp type ole2_object."temporary variat
check p_workbook is not initial.
get property of p_workbook 'Application' = h_temp.
* CALL METHOD OF h_temp 'Close'.
call method of
h_temp
'QUIT'.
endform. " FM_CLOSE_APP
*&---------------------------------------------------------------------*
*& Form fm_free_app
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form fm_free_app.
free object: g_app,g_workbook.
endform. "fm_free_app
*&---------------------------------------------------------------------*
*& Form fm_finish_app
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form fm_finish_app.
perform fm_show_app using g_workbook.
perform fm_free_app.
endform. "fm_finish_app
*&---------------------------------------------------------------------*
*& Form fm_chg_sheet1_ddic
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WORKBOOK text
*----------------------------------------------------------------------*
form fm_chg_sheet1_ddic using p_workbook type ole2_object.
* DATA:l_temp TYPE ole2_object.
data:l_worksheets type ole2_object.
data:l_last type ole2_object.
data:l_sheetnum type i.
data:l_count type i.
data:l_temp type ole2_object.
get property of p_workbook 'Worksheets' = l_worksheets.
get property of l_worksheets 'Count' = l_sheetnum.
l_count = l_sheetnum - 1.
do l_count times.
call method of
l_worksheets
'Item' = l_last
exporting
#1 = sy-index.
call method of
l_last
'Activate'.
******** 改变颜色,加框
perform fm_chg_sheet1_color using l_last.
******** 冻结框口
call method of
l_last
'Range' = l_last
exporting
#1 = 'A8'.
call method of
l_last
'Select'.
get property of p_workbook 'Application' = l_last.
get property of l_last 'ActiveWindow' = l_last.
set property of l_last 'FreezePanes' = 1.
enddo.
call method of
l_worksheets
'Item' = l_last
exporting
#1 = l_sheetnum.
* IF dy_bd = 'X'.
* DATA:l_temp TYPE ole2_object.
* CALL METHOD OF l_worksheets 'Item' = l_temp
* EXPORTING
* #1 = 1.
*
* SET PROPERTY OF l_temp 'Name' = '设备功能位置'.
*
* CALL METHOD OF l_temp 'Move'
* EPORTING
* #1 = l_last.
* ENDIF.
call method of
l_last
'Delete'.
call method of
l_worksheets
'Item' = l_last
exporting
#1 = 1.
call method of
l_last
'Activate'.
free object: l_temp,l_last.
endform. "fm_chg_sheet1_ddic
*&---------------------------------------------------------------------*
*& Form fm_chg_sheet1_color
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LAST text
*----------------------------------------------------------------------*
form fm_chg_sheet1_color using p_last type ole2_object.
* Rows("8:8").Select
* ActiveWindow.FreezePanes = True.
data:l_tempx type ole2_object.
data:l_sheet type ole2_object.
data:l_app type ole2_object.
call method of
p_last
'Rows' = l_tempx
exporting
#1 = '1:7'.
perform fm_draw_line using l_tempx.
get property of l_tempx 'Interior' = l_tempx.
set property of l_tempx 'ColorIndex' = 6.
set property of l_tempx 'Pattern' = -4161.
* FREE OBJECT l_tempx.
endform. "fm_chg_sheet1_color
*&---------------------------------------------------------------------*
*& Form fm_draw_line
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SEL text
*----------------------------------------------------------------------*
form fm_draw_line using p_sel type ole2_object.
check p_sel is not initial.
data:l_border type ole2_object.
data: begin of ltw_style,
style type text12,
count type i,
end of ltw_style.
data:begin of ltw_count occurs 0,
count type i,
style like table of ltw_style,
end of ltw_count.
* DATA:ltw_count TYPE TABLE OF i.
* APPEND 5 TO ltw_count.
* APPEND 6 TO ltw_count.
ltw_count-count = 5.
ltw_style-style = 'LineStyle'.
ltw_style-count = -4142.
append ltw_style to ltw_count-style.
append ltw_count.
ltw_count-count = 6.
append ltw_count.
clear ltw_count.
ltw_style-style = 'LineStyle'.
ltw_style-count = 1.
append ltw_style to ltw_count-style.
ltw_style-style = 'Weight'.
ltw_style-count = 2.
append ltw_style to ltw_count-style.
ltw_style-style = 'ColorIndex'.
ltw_style-count = -4105.
append ltw_style to ltw_count-style.
ltw_count-count = 7.
append ltw_count.
ltw_count-count = 8.
append ltw_count.
ltw_count-count = 9.
append ltw_count.
ltw_count-count = 10.
append ltw_count.
ltw_count-count = 11.
append ltw_count.
ltw_count-count = 12.
append ltw_count.
loop at ltw_count.
call method of
p_sel
'Borders' = l_border
exporting
#1 = ltw_count-count.
loop at ltw_count-style into ltw_style.
case sy-tabix.
when 1.set property of l_border 'LineStyle' = ltw_style-count.
when 2.set property of l_border 'Weight' = ltw_style-count.
when 3.set property of l_border 'ColorIndex' = ltw_style-count.
when others.
endcase.
endloop.
endloop.
endform. "fm_draw_line
*&---------------------------------------------------------------------*
*& Form fm_fill_sheet
*&--------------------------------------------------------------------*
* text
*&---------------------------------------------------------------------*
* -->P_CLASS text
* -->P_IDX text
* -->P_WORKBOOK text
* -->PT_ASC text
*----------------------------------------------------------------------*
form fm_fill_sheet using p_class
p_idx
p_workbook
pt_asc type g_lines.
data:l_sheet type ole2_object.
data:l_count type i.
data:l_temp type ole2_object.
perform fm_add_sheet using p_class p_idx p_workbook
changing l_sheet.
data:ld_rc type i.
call method cl_gui_frontend_services=>clipboard_export
importing
data = pt_asc[]
changing
rc = ld_rc
exceptions
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
others = 4.
get property of l_sheet 'Cells' = l_temp.
call method of
l_temp
'Select'.
get property of l_sheet 'Application' = l_temp.
get property of l_temp 'Selection' = l_temp.
set property of l_temp 'NumberFormatLocal' = '@'.
call method of
l_sheet
'Cells' = l_temp
exporting
#1 = 1
#2 = 1.
call method of
l_temp
'Select'.
call method of
l_sheet
'Paste'.
get property of l_sheet 'Application' = l_temp.
data:l_selection type ole2_object.
get property of l_temp 'Selection' = l_selection.
get property of l_selection 'Font' = l_temp.
set property of l_temp 'Size' = 10.
get property of l_selection 'Columns' = l_temp.
call method of
l_temp
'AutoFit'.
endform. " FM_FILL_SHEET
*&---------------------------------------------------------------------*
*& Form fm_fill_sheet_name
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CLASS text
* -->P_IDX text
* -->P_WORKBOOK text
* -->PT_ASC text
*----------------------------------------------------------------------*
form fm_fill_sheet_name using p_class
p_idx
p_workbook
pt_asc type g_lines.
data:l_sheet type ole2_object.
data:l_count type i.
data:l_temp type ole2_object.
perform fm_add_sheet_name using p_class p_idx p_workbook
changing l_sheet.
data:ld_rc type i.
call method cl_gui_frontend_services=>clipboard_export
importing
data = pt_asc[]
changing
rc = ld_rc
exceptions
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
others = 4.
get property of l_sheet 'Cells' = l_temp.
call method of
l_temp
'Select'.
get property of l_sheet 'Application' = l_temp.
get property of l_temp 'Selection' = l_temp.
set property of l_temp 'NumberFormatLocal' = '@'.
call method of
l_sheet
'Cells' = l_temp
exporting
#1 = 1
#2 = 1.
call method of
l_temp
'Select'.
call method of
l_sheet
'Paste'.
get property of l_sheet 'Application' = l_temp.
data:l_selection type ole2_object.
get property of l_temp 'Selection' = l_selection.
get property of l_selection 'Font' = l_temp.
set property of l_temp 'Size' = 10.
get property of l_selection 'Columns' = l_temp.
call method of
l_temp
'AutoFit'.
endform. " FM_FILL_SHEET
*&---------------------------------------------------------------------*
*& Form fm_add_sheet
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CLASS text
* -->P_IDX text
* -->P_WORKBOOK text
* -->P_SHEET text
*----------------------------------------------------------------------*
form fm_add_sheet using p_class p_idx p_workbook
changing p_sheet.
data:l_count type i.
data:l_temp type ole2_object.
data:l_last type ole2_object.
get property of p_workbook 'Worksheets' = l_temp.
get property of l_temp 'Count' = l_count.
if p_idx >= l_count."增加sheet
call method of
l_temp
'Item' = l_last
exporting
#1 = l_count.
call method of
l_temp
'Add' = p_sheet
exporting
#1 = l_last.
else.
call method of
p_workbook
'Worksheets' = p_sheet
exporting
#1 = p_idx.
endif.
data:l_kschg type m_clasb-kschg.
select single kschg into l_kschg
from m_clasb where class = p_class.
concatenate '(' p_class ')' l_kschg into l_kschg.
translate l_kschg using '\_/_'.
condense l_kschg no-gaps.
set property of p_sheet 'Name' = l_kschg.
call method of
p_sheet
'Activate'.
endform. "fm_fill_sheet_name
*&---------------------------------------------------------------------*
*& Form fm_add_sheet_name
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CLASS text
* -->P_IDX text
* -->P_WORKBOOK text
* -->P_SHEET text
*----------------------------------------------------------------------*
form fm_add_sheet_name using p_class p_idx p_workbook
changing p_sheet.
data:l_count type i.
data:l_temp type ole2_object.
data:l_last type ole2_object.
get property of p_workbook 'Worksheets' = l_temp.
get property of l_temp 'Count' = l_count.
if p_idx > l_count."增加sheet
call method of
l_temp
'Item' = l_last
exporting
#1 = l_count.
call method of
l_temp
'Add' = p_sheet
exporting
#1 = l_last.
else.
call method of
p_workbook
'Worksheets' = p_sheet
exporting
#1 = p_idx.
endif.
data:l_kschg type m_clasb-kschg.
* SELECT SINGLE kschg INTO l_kschg
* FROM m_clasb WHERE class = p_class.
concatenate '(' p_class ')' l_kschg into l_kschg.
l_kschg = p_class.
translate l_kschg using '\_/_'.
condense l_kschg no-gaps.
set property of p_sheet 'Name' = l_kschg.
call method of
p_sheet
'Activate'.
endform. "fm_fill_sheet_name
*&---------------------------------------------------------------------*
*& Form fm_bulid_innter
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_TAB text
* -->PT_FCAT text
* -->TABULATOR text
* -->PROGNM text
* -->PT_ASC text
*----------------------------------------------------------------------*
form fm_bulid_innter using pt_tab type standard table
pt_fcat type lvc_t_fcat tabulator prognm type repid
changing pt_asc type g_lines.
field-symbols:<l_cat> like line of pt_fcat,
<l_fs>.
data:l_tabix type sy-tabix.
data:l_line like line of pt_asc.
data:l_inx like sy-tabix.
loop at pt_tab assigning <l_fs>.
check <l_fs> is not initial.
clear l_line.
clear l_inx.
loop at pt_fcat assigning <l_cat> .
l_inx = l_inx + 1.
perform fm_fill_value using l_inx <l_fs> <l_cat>-fieldname tabulator prognm
changing l_line.
endloop.
append l_line to pt_asc.
endloop.
endform. "fm_bulid_innter
*&---------------------------------------------------------------------*
*& Form fm_fill_value
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA text
* -->P_FLDNM text
* -->TABULATOR text
* -->PROGNM text
* -->P_LINE text
*----------------------------------------------------------------------*
form fm_fill_value using p_inx p_wa p_fldnm tabulator prognm
changing p_line type g_line.
field-symbols:<l_field>.
data:l_val type g_field.
assign component p_fldnm of structure p_wa to <l_field>.
if sy-subrc = 0 and <l_field> is not initial.
l_val = <l_field>.
condense l_val.
endif.
if p_inx = 1.
p_line = l_val.
else.
concatenate p_line tabulator l_val into p_line.
endif.
endform. "fm_fill_value
*&---------------------------------------------------------------------*
*& Form fm_clear_variant
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form fm_clear_variant.
clear has_data.
if <lt_fs> is assigned.
free <lt_fs>.
unassign <lt_fs>.
endif.
if l_ref is not initial.
clear l_ref.
endif.
clear:lf_data.
free: lt_fcat,lt_chart,lt_asc.
endform. "fm_clear_variant
*&---------------------------------------------------------------------*
*& Form fm_build_structure
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_KLART text
* -->P_CLASS text
* -->P_TABNAME text
* -->PT_FCAT text
* -->PT_CHART text
*---------------------------------------------------------------------*
form fm_build_structure using p_tabname changing pt_fcat type lvc_t_fcat .
****根据固定表构建字段目录*************
refresh pt_fcat.
call function 'LVC_FIELDCATALOG_MERGE'
exporting
* I_BUFFER_ACTIVE =
i_structure_name = p_tabname
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
changing
ct_fieldcat = pt_fcat
exceptions
inconsistent_interface = 1
program_error = 2
others = 3.
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. " FM_BUILD_STRUCTURE
*&---------------------------------------------------------------------*
*& Form fm_build_append_stru
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_KLART text
* -->P_CLASS text
* -->PT_FCAT text
* -->PT_CHART text
*----------------------------------------------------------------------*
form fm_build_append_stru using p_klart p_class
changing pt_fcat type lvc_t_fcat pt_chart type tt_chart.
***根据类包含的属性构建字段目录********
*类包含参数
data:l_class_key type bapi_class_key.
l_class_key-classnum = p_class.
l_class_key-classtype = p_klart.
data:lt_charv type table of bapi_char_values.
refresh pt_chart.
call function 'BAPI_CLASS_GET_CHARACTERISTICS'
exporting
classnum = l_class_key-classnum
classtype = l_class_key-classtype
tables
characteristics = pt_chart
char_values = lt_charv.
if pt_chart is initial.
* MESSAGE e001(00) WITH '找不到特性!' RAISING no_class_data.
endif.
field-symbols:<l_fs> type bapi_char.
field-symbols:<l_fcat> like line of pt_fcat.
data:ls_fcat like line of pt_fcat.
ls_fcat-ref_table = 'ALAVLJ2EE'.
ls_fcat-ref_field = 'IPADDRESS'.
ls_fcat-col_pos = lines( pt_fcat )."l_max.
loop at pt_chart assigning <l_fs>.
ls_fcat-col_pos = ls_fcat-col_pos + 1.
ls_fcat-fieldname = <l_fs>-name_char.
ls_fcat-reptext = <l_fs>-descr_char.
append ls_fcat to pt_fcat.
endloop.
endform. "fm_build_append_stru
*&---------------------------------------------------------------------*
*& Form fm_get_tabref
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FCAT text
* -->PF_DATA text
*----------------------------------------------------------------------*
form fm_get_tabref using pt_fcat type lvc_t_fcat changing pf_data.
**根据字段目录构建内表结构****
type-pools:abap.
data:l_fcat like line of pt_fcat.
data:l_field type char128.
data: struct_type type ref to cl_abap_structdescr,
comp_tab type cl_abap_structdescr=>component_table,
comp like line of comp_tab,
dref type ref to data.
loop at pt_fcat into l_fcat.
comp-name = l_fcat-fieldname.
if l_fcat-ref_field is not initial.
concatenate l_fcat-ref_table '-' l_fcat-ref_field into l_field.
else.
concatenate l_fcat-ref_table '-' l_fcat-fieldname into l_field.
endif.
comp-type ?= cl_abap_typedescr=>describe_by_name( l_field ).
append comp to comp_tab.
endloop.
struct_type = cl_abap_structdescr=>create( comp_tab ).
data:l_tab_type type ref to cl_abap_tabledescr.
l_tab_type = cl_abap_tabledescr=>create( struct_type ).
create data pf_data type handle l_tab_type.
endform. "fm_get_tabref
*&---------------------------------------------------------------------*
*& Form fm_bulid_header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_CHART text
* -->TABULATOR text
* -->PROGNM text
* -->PT_FCAT text
* -->PT_TAB text
*----------------------------------------------------------------------*
form fm_bulid_header using pt_chart type tt_chart
tabulator prognm
changing pt_fcat type lvc_t_fcat
pt_tab type g_lines.
constants:c_header_line type i value 1.
data:l_char type bapi_char.
data:l_line like line of pt_tab.
field-symbols:<l_line> like line of pt_tab.
do c_header_line times.
append l_line to pt_tab.
enddo.
field-symbols:<l_fs> like line of pt_fcat.
data:l_tabix type i.
data:l_count type i.
data:l_obg(2) type c.
data:l_fcat like line of pt_fcat.
clear l_tabix.
loop at pt_fcat assigning <l_fs> .
l_tabix = l_tabix + 1.
"填充TAB符号
read table pt_tab assigning <l_line> index l_tabix.
if l_tabix = 1.
concatenate <l_line> <l_fs>-scrtext_l into <l_line>.
else.
concatenate <l_line> tabulator into <l_line>.
concatenate <l_line> <l_fs>-scrtext_l into <l_line>.
endif.
endloop.
* LOOP AT pt_tab ASSIGNING <l_line>.
* CASE sy-tabix.
* WHEN 1.CONCATENATE '字段名称' <l_line>-row INTO <l_line>-row.
* ENDCASE.
* ENDLOOP.
endform. "fm_bulid_header
*&---------------------------------------------------------------------*
*& Form fm_fill_header_line
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_VALUE text
* -->P_IDX text
* -->PT_TAB text
*----------------------------------------------------------------------*
form fm_fill_header_line using p_value p_idx type i
changing pt_tab type g_lines .
field-symbols:<l_line> like line of pt_tab.
data:l_val type c length 128.
read table pt_tab assigning <l_line> index p_idx.
l_val = p_value.
condense l_val.
concatenate <l_line> l_val into <l_line>.
endform. "fm_fill_header_line
*&---------------------------------------------------------------------*
*& Form fm_get_charval
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_TAB text
* -->PT_RESULT text
*----------------------------------------------------------------------*
form fm_get_charval using p_fldnm p_tabnm pt_tab type standard table
changing pt_result type standard table.
field-symbols:<l_line>.
field-symbols:<l_result_line> .
loop at pt_tab assigning <l_line>.
append initial line to pt_result assigning <l_result_line>.
move-corresponding <l_line> to <l_result_line>.
* perform fm_get_char using <l_line> p_fldnm p_tabnm "pt_chart
* changing <l_result_line>.
endloop.
endform. "fm_get_charval
*&---------------------------------------------------------------------*
*& Form fm_convert_charval
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_VAL text
* -->P_WA text
*----------------------------------------------------------------------*
form fm_convert_charval using pt_val type standard table
changing p_wa.
field-symbols:<l_source>.
field-symbols:<l_line>,<l_fldnm>,<l_value>,<l_value2>,<l_dest>,<l_rel>.
data:l_atflv(3) type c.
field-symbols:<l_unit> type any.
data:l_dest type atwrt.
assign l_dest to <l_dest>.
data:l_unit type char6.
loop at pt_val assigning <l_line>.
assign component 'CHARACT' of structure <l_line> to <l_fldnm>.
assign component <l_fldnm> of structure p_wa to <l_source>.
clear <l_dest>.
check sy-subrc = 0.
assign component 'VALUE_FROM' of structure <l_line> to <l_value>.
if sy-subrc <> 0.
assign component 'VALUE_CHAR' of structure <l_line> to <l_value>.
<l_dest> = <l_value>.
else.
assign component 'VALUE_TO' of structure <l_line> to <l_value2>.
assign component 'VALUE_RELATION' of structure <l_line> to <l_rel>.
call function 'CTBP_CONVERT_VALUE_INT_TO_EXT'
exporting
charactname = <l_fldnm>
value_from = <l_value>
value_to = <l_value2>
value_relation = <l_rel>
* CHARACTDETAIL =
importing
value_external = <l_dest>
exceptions
charact_not_found = 1
no_authority = 2
wrong_data_type = 3
internal_error = 4
wrong_input = 5
wrong_format = 6
others = 7.
if sy-subrc = 0.
* CONDENSE <l_dest> NO-GAPS.
assign component 'UNIT_FROM' of structure <l_line> to <l_unit>.
if sy-subrc = 0 and <l_unit> is not initial.
* l_unit = <l_unit>.
call function 'CONVERSION_EXIT_LUNIT_OUTPUT'
exporting
input = <l_unit>
language = '1'
importing
* LONG_TEXT =
output = l_unit
* short_text = l_unit
exceptions
unit_not_found = 1
others = 2.
if sy-subrc = 0.
replace first occurrence of l_unit in <l_dest> with ''.
else.
replace first occurrence of <l_unit> in <l_dest> with ''.
endif.
endif.
assign component 'UNIT_TO' of structure <l_line> to <l_unit>.
if sy-subrc = 0 and <l_unit> is not initial.
call function 'CONVERSION_EXIT_LUNIT_OUTPUT'
exporting
input = <l_unit>
language = '1'
importing
* LONG_TEXT =
output = l_unit
* SHORT_TEXT =
exceptions
unit_not_found = 1
others = 2.
if sy-subrc = 0.
replace first occurrence of l_unit in <l_dest> with ''.
else.
replace first occurrence of <l_unit> in <l_dest> with ''.
endif.
endif.
assign component 'CURRENCY_FROM' of structure <l_line> to <l_unit>.
if sy-subrc = 0 and <l_unit> is not initial.
replace first occurrence of <l_unit> in <l_dest> with ''.
endif.
assign component 'CURRENCY_TO' of structure <l_line> to <l_unit>.
if sy-subrc = 0 and <l_unit> is not initial.
replace first occurrence of <l_unit> in <l_dest> with ''.
endif.
endif.
endif.
if <l_source> is not initial.
concatenate <l_source> ';' <l_dest> into <l_source>.
else.
<l_source> = <l_dest>.
endif.
endloop.
endform. "fm_convert_charval
*&---------------------------------------------------------------------*
*& Form fm_fill_sheet_PROJ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CLASS text
* -->P_IDX text
* -->P_WORKBOOK text
* -->PT_ASC text
*----------------------------------------------------------------------*
form fm_fill_sheet_proj using p_class
p_idx
p_workbook
pt_asc type g_lines.
data:l_sheet type ole2_object.
data:l_count type i.
data:l_temp type ole2_object.
perform fm_add_sheet_proj using p_class p_idx p_workbook
changing l_sheet.
data:ld_rc type i.
call method cl_gui_frontend_services=>clipboard_export
importing
data = pt_asc[]
changing
rc = ld_rc
exceptions
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
others = 4.
get property of l_sheet 'Cells' = l_temp.
call method of
l_temp
'Select'.
get property of l_sheet 'Application' = l_temp.
get property of l_temp 'Selection' = l_temp.
set property of l_temp 'NumberFormatLocal' = '@'.
call method of
l_sheet
'Cells' = l_temp
exporting
#1 = 1
#2 = 1.
call method of
l_temp
'Select'.
call method of
l_sheet
'Paste'.
get property of l_sheet 'Application' = l_temp.
data:l_selection type ole2_object.
get property of l_temp 'Selection' = l_selection.
get property of l_selection 'Font' = l_temp.
set property of l_temp 'Size' = 10.
get property of l_selection 'Columns' = l_temp.
call method of
l_temp
'AutoFit'.
endform. " FM_FILL_SHEET
*&---------------------------------------------------------------------*
*& Form fm_add_sheet_PROJ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CLASS text
* -->P_IDX text
* -->P_WORKBOOK text
* -->P_SHEET text
*----------------------------------------------------------------------*
form fm_add_sheet_proj using p_class p_idx p_workbook
changing p_sheet.
data:l_count type i.
data:l_temp type ole2_object.
data:l_last type ole2_object.
get property of p_workbook 'Worksheets' = l_temp.
get property of l_temp 'Count' = l_count.
if p_idx >= l_count."增加sheet
call method of
l_temp
'Item' = l_last
exporting
#1 = l_count.
call method of
l_temp
'Add' = p_sheet
exporting
#1 = l_last.
else.
call method of
p_workbook
'Worksheets' = p_sheet
exporting
#1 = p_idx.
endif.
data:l_kschg type tcj4t-profi_txt.
select single profi_txt into l_kschg
from tcj4t where profidproj = p_class and spras = '1'.
concatenate '(' p_class ')' l_kschg into l_kschg.
translate l_kschg using '\_/_'.
condense l_kschg no-gaps.
set property of p_sheet 'Name' = l_kschg.
call method of
p_sheet
'Activate'.
endform. "fm_fill_sheet_name
功能实现
FORM sub_write_data .
DATA:l_idx TYPE int4.
DATA:g_title(80).
DATA:gnum(4).
DATA:lt_odata LIKE zgns_mf001 OCCURS 0 WITH HEADER LINE.
DATA:lt_down_item LIKE zgns_mf001 OCCURS 0 WITH HEADER LINE.
CLEAR:l_idx,gnum.
LOOP AT gt_tab.
lt_odata-sel = gt_tab-sel.
lt_odata-xabln = gt_tab-xabln.
lt_odata-mblnr = gt_tab-mblnr.
lt_odata-zeile = gt_tab-zeile.
lt_odata-bwart = gt_tab-bwart.
lt_odata-xblnr = gt_tab-xblnr.
lt_odata-lfbnr = gt_tab-lfbnr.
lt_odata-ebeln = gt_tab-ebeln.
lt_odata-ebelp = gt_tab-ebelp.
lt_odata-matnr = gt_tab-matnr.
lt_odata-txz01 = gt_tab-txz01.
lt_odata-ferth = gt_tab-ferth.
lt_odata-charg = gt_tab-charg.
lt_odata-lifnr = gt_tab-lifnr.
lt_odata-name1 = gt_tab-name1.
lt_odata-werks = gt_tab-werks.
lt_odata-lgort = gt_tab-lgort.
lt_odata-lgobe = gt_tab-lgobe.
lt_odata-erfme_out = gt_tab-erfme_out.
lt_odata-menge = gt_tab-menge.
lt_odata-bldat = gt_tab-bldat.
lt_odata-budat = gt_tab-budat.
lt_odata-cpudt = gt_tab-cpudt.
lt_odata-cputm = gt_tab-cputm.
lt_odata-usnam = gt_tab-usnam.
APPEND lt_odata.
ENDLOOP.
FIELD-SYMBOLS:<t_fcat> TYPE lvc_s_fcat.
CLEAR lt_down_item .REFRESH lt_down_item .
TRY.
PERFORM fm_show_progress USING 10 g_title.
PERFORM fm_get_conv_data.
PERFORM fm_get_workbook CHANGING g_app g_workbook.
l_idx = l_idx + 1.
PERFORM fm_clear_variant.
*根据类别构建输出数据结构***************************************
PERFORM fm_build_structure USING 'ZGNS_MF001' CHANGING lt_fcat.
***********************************************************************
****必须在此处声明并使用************************************************
DATA: has_data TYPE c.
DATA: tabulator TYPE c.
DATA: tabulator_hex(2) TYPE x VALUE 9.
CALL METHOD cl_abap_conv_in_ce=>uccp
EXPORTING
uccp = tabulator_hex
RECEIVING
char = tabulator.
***********************************************************************
*根据字段目录构建内表****************************************************
PERFORM fm_get_tabref USING lt_fcat CHANGING lf_data.
************************************************************************
*构建导出数据*************************************************************
CREATE DATA l_ref TYPE TABLE OF zgns_mf001.
FIELD-SYMBOLS:<lt_fs> TYPE STANDARD TABLE .
ASSIGN l_ref->* TO <lt_fs>.
<lt_fs> = lt_odata[].
*************************************************************************
*******构建导出EXCEL第一行数据(字段信息)************************************
IF lt_asc IS INITIAL.
* perform fm_bulid_header using lt_chart tabulator sy-repid
* changing lt_fcat lt_asc.
DATA:l_asc TYPE g_line.
CLEAR l_asc.
CONCATENATE
'选择'
'收货单编号'
'入仓单号'
'序号'
'移动类型'
'送货单号'
'送检单号'
'采购订单号'
'采购行项目'
'物料编码'
'品名规格'
'内部型号'
'批次'
'供应商'
'供应商名称'
'工厂'
'仓位'
'仓位名称'
'单位'
'实收数量'
'凭证日期'
'过账日期'
'开单日期'
'开单时间'
'开单人'
INTO l_asc-row SEPARATED BY tabulator.
APPEND l_asc TO lt_asc.
ENDIF.
**************************************************************************
*******构建导出数据********************************************************
IF <lt_fs> IS ASSIGNED.
PERFORM fm_bulid_innter USING <lt_fs> lt_fcat tabulator sy-repid
CHANGING lt_asc.
ENDIF.
*************************************************************************
*****根据不同的类导出数据到不同的标签**************************************
PERFORM fm_fill_sheet_name USING 'Sheet1' 1 g_workbook lt_asc.
************************************************************************
g_title = '导出完毕,开始展示...'.
PERFORM fm_show_progress USING 100 g_title.
* PERFORM fm_chg_sheet_ddic USING g_workbook.
PERFORM fm_finish_app.
CATCH cx_root INTO g_referr.
PERFORM fm_finish_app.
RAISE process_error.
ENDTRY.
ENDFORM.