abap 用excel将alv上展示的数据导出(基本知识)
转自:http://blog.sina.com.cn/s/blog_98dd7e1101013crl.html
form user_command using r_ucomm like sy-ucomm rs_selfield type slis_selfield . case r_ucomm. when 'EX'.(alv菜单栏上的按钮) perform excel_data. endcase.endform.
*&-------------------------------------------------------------------
form excel_data . perform def_excel. perform sho_excel.endform. " EXECL_DATA*--------------------------------------------------------------------form def_excel .
(以下的代码是必须写的,比较固定,用的时候直接写就行) define fill_cell. call method of v_excel 'CELLS' = v_cell "单元格位置 exporting #1 = &1 #2 = &2. set property of v_cell 'value' = &3. call method of v_cell 'FONT' = v_font. set property of v_font 'Bold' = &4. set property of v_font 'size' = &5. end-of-definition. create object v_excel 'Excel.Application'. call method of v_excel 'Workbooks' = v_book. call method of v_book 'ADD'.*给第一行填充要写的东西,一下的第一个‘1’表示第一行,第二个‘1’表示第一列。 fill_cell 1 1 '生产情况形象进度统计表' 1 20. set property of v_cell 'HorizontalAlignment' = -4108.(这句是居中) set property of v_font 'UNDERLINE' = 2.(下划线)
以下代码主要作用是定义第二行各列和第三行各列、第四行各列:
fill_cell 2 1 '' 1 10. fill_cell 2 2 '' 1 10. fill_cell 2 3 '' 1 10. fill_cell 2 4 '' 1 10. fill_cell 2 5 '' 1 10. fill_cell 2 6 '' 1 10. fill_cell 2 7 '统计时间' 1 10. fill_cell 2 8 '' 1 10. fill_cell 2 9 '' 1 10. fill_cell 2 10 '' 1 10.* fill_cell 3 10 '' 1 10. fill_cell 2 11 '' 1 10. fill_cell 2 12 '' 1 10. fill_cell 2 13 '' 1 10. fill_cell 2 14 '' 1 10. fill_cell 3 1 '' 1 10. fill_cell 3 2 '' 1 10. fill_cell 3 3 '' 1 10. fill_cell 3 4 '' 1 10. fill_cell 3 5 '' 1 10. fill_cell 3 6 '' 1 10. fill_cell 3 7 '' 1 10. fill_cell 3 8 '' 1 10. fill_cell 3 9 '' 1 10. fill_cell 3 10 '编号' 1 10.* fill_cell 3 10 '' 1 10. fill_cell 3 11 ex_itab-num1 1 10. fill_cell 3 12 '' 1 10. fill_cell 3 13 '' 1 10. fill_cell 3 14 '' 1 10.* fill_cell 4 1 '序号' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 2 '工厂' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 3 '生产订单' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 4 '订单描述' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 5 '计划下达时间' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 6 '实际下达时间' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 7 '计划完工时间' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 8 '实际完工时间' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 9 '完工工时' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 10 '总工时' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 11 '完成进度' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 12 '计划资金' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 13 '进度资金' 1 10. set property of v_cell 'HorizontalAlignment' = -4108. fill_cell 4 14 '备注' 1 10. set property of v_cell 'HorizontalAlignment' = -4108.*************先把第一行的所有列都合并**************************** call method of v_excel 'Range' = v_range exporting #1 = 'A1'(这里的意思是从A1到N1这个范围合并) #2 = 'N1'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.**************************一行一列合并 call method of v_excel 'COLUMNS' = v_column exporting #1 = 'E'."列编号 set property of v_column 'ColumnWidth' = 10. set property of v_column 'NumberFormat' = '@'.endform. " DEF_EXCEL*&-------------------------------------------------------------------*--------------------------------------------------------------------form sho_excel . field-symbols : type any , type any. data: lv_txt(50) type c. data: row_i type i, 定义行和列 col_i type i.*** 从内表循环数据,按顺序填到单元表中 loop at alv_itab.(将alv的数据传到为excel定义的内表中) move alv_itab-num to ex_itab-num. move alv_itab-werks to ex_itab-werks. move alv_itab-aufnr to ex_itab-aufnr. move alv_itab-maktx to ex_itab-maktx. move alv_itab-ftrms to ex_itab-ftrms. move alv_itab-ftrmi to ex_itab-ftrmi. move alv_itab-gltrs to ex_itab-gltrs. move alv_itab-idat2 to ex_itab-idat2. move alv_itab-ism01 to ex_itab-ism01. move alv_itab-vgw01 to ex_itab-vgw01. move alv_itab-rate to ex_itab-rate. move alv_itab-jhzj to ex_itab-jhzj. move alv_itab-jdzj to ex_itab-jdzj. move alv_itab-beizhu to ex_itab-beizhu. move alv_itab-zijin1 to ex_itab-zijin1. move alv_itab-zijin2 to ex_itab-zijin2. move alv_itab-num1 to ex_itab-num1. append ex_itab. endloop.
* loop at ex_itab assigning .(表示是分配一个工作区>) row_i = sy-tabix + 4.(意思是从第五行开始添加循环传进去的数据) do 13 times.(循环13列,切记,不是行,是列) col_i = sy-index . assign component sy-index of structure to . lv_txt = . fill_cell row_i col_i lv_txt 0 10. enddo.
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
这段代码的意思大致就是保持格式的意思吧~~~~我也不是特别理解,但是对它的重要性深有体会啊啊啊啊啊!!!!!!! call method of v_excel 'COLUMNS' = v_column exporting #1 = 12.(12指的是12列,意思就是第12列的数据按char型导出,长短什么的都不发生变化,若是想要输出的字段是资金型的,那这段代码就必不可少了,O(∩_∩)O~) set property of v_column 'ColumnWidth' = 10. set property of v_column 'NumberFormat' = .》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》 ENDDO. endloop.
fill_cell 3 11 ex_itab-num1 1 10.(这里的ex_itab-num1是excel内表字段) fill_cell 2 8 sy-datum 1 8.
row_i = row_i + 1.
fill_cell row_i 11 '合计:' 1 10 . fill_cell row_i 12 ex_itab-zijin1 1 10. fill_cell row_i 13 ex_itab-zijin2 1 10. row_i = row_i + 1. fill_cell row_i 2 '审核:' 1 10. fill_cell row_i 11 '制编人:' 1 10. data: post type string, col type c value 'N',(‘N’表示excel上最后一列的号) row type string. row_i = row_i - 2.(减去二的意思是:最后两行不用划线) move row_i to row. concatenate 'N' row into post. call method of v_excel 'Range' = v_range exporting #1 = 'A4'"A4表示从A4开始画表格线 #2 = post. call method of v_range 'BORDERS' = v_border. set property of v_border 'LineStyle' = '1'. set property of v_border 'WEIGHT' = '2 '. set property of v_border 'ColorIndex' = '1'. free object v_border. free object v_cell. call method of v_excel 'Columns' = v_column. call method of v_column 'Autofit'.*** 设置excel为可见 set property of v_excel 'Visible' = 1.endform. "sho_excel
展示结果如下:
若是在表头部分有合并单元格的,那么代码如下。
****一行一列和二行一列合并 call method of v_excel 'Range' = v_range exporting #1 = 'A1'(意思是A1和A2合并了) #2 = 'A2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.***** call method of v_excel 'Range' = v_range exporting #1 = 'B1' #2 = 'B2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.**** call method of v_excel 'Range' = v_range exporting #1 = 'C1' #2 = 'C2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.*** call method of v_excel 'Range' = v_range exporting #1 = 'D1' #2 = 'D2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.**** call method of v_excel 'Range' = v_range exporting #1 = 'E1' #2 = 'E2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.*** call method of v_excel 'Range' = v_range exporting #1 = 'H1' #2 = 'H2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.*** call method of v_excel 'Range' = v_range exporting #1 = 'I1' #2 = 'I2'. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.*** call method of v_excel 'Range' = v_range exporting #1 = 'F1'(意思是F1和G1合并了) #2 = 'G1'. set property of v_cell 'HorizontalAlignment' = -4108. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1. call method of v_excel 'Range' = v_range exporting #1 = 'J1'(意思是J1和K1合并了) #2 = 'K1'. set property of v_cell 'HorizontalAlignment' = -4108. call method of v_range 'Select'. set property of v_range 'MergeCells' = 1.结果展示如下: