先把基本的FORM写好:

1.行列属性

  1. FORM row_column USING p_r p_width p_type.
  2. CASE p_type.
  3. WHEN 'R'. "行高
  4. CALL METHOD OF gs_excel 'CELLS' = gs_cells EXPORTING # = p_r # = .
  5. GET PROPERTY OF gs_cells 'rows' = gs_rows.
  6. SET PROPERTY OF gs_rows 'rowheight' = p_width.
  7. WHEN 'C'. "列宽
  8. CALL METHOD OF gs_excel 'CELLS' = gs_cells EXPORTING # = # = p_r.
  9. GET PROPERTY OF gs_cells 'columns' = gs_columns .
  10. SET PROPERTY OF gs_columns 'columnwidth' = p_width.
  11. ENDCASE.
  12. FREE OBJECT gs_rows.
  13. FREE OBJECT gs_columns.
  14. FREE OBJECT gs_cells.
  15. ENDFORM. " PRM_EXPORT_EXCEL1

2.指定行列边框,字体

  1. FORM merged USING x1 y1 x2 y2 p_linestyle.
  2. *--Selecting cell area to be merged.
  3. CALL METHOD OF gs_excel 'Cells' = gs_cell1
  4. EXPORTING
  5. # = x1
  6. # = y1.
  7. CALL METHOD OF gs_excel 'Cells' = gs_cell2
  8. EXPORTING
  9. # = x2
  10. # = y2.
  11. CALL METHOD OF gs_excel 'Range' = gs_range
  12. EXPORTING
  13. # = gs_cell1
  14. # = gs_cell2.
  15. CALL METHOD OF gs_range 'Select'.
  16. *--Merging
  17. CALL METHOD OF gs_range 'Merge' .
  18.  
  19. GET PROPERTY OF gs_range 'borders' = gs_borders .
  20. SET PROPERTY OF gs_borders 'weight' = ''.
  21. SET PROPERTY OF gs_borders 'linestyle' = p_linestyle.
  22.  
  23. FREE OBJECT gs_range.
  24. FREE OBJECT gs_borders.
  25.  
  26. ENDFORM. " MERGED

3.单元格填充

  1. FORM fill_cell_gs USING p_r1
  2. p_r2
  3. p_bold
  4. p_size
  5. p_linestyle
  6. p_value.
  7. CALL METHOD OF gs_excel 'CELLS' = gs_cells EXPORTING # = p_r1 # = p_r2.
  8. * 设置被选中单元格的对齐方式
  9. " && 水平方向 2左对齐,3居中,4右对齐
  10. SET PROPERTY OF gs_cells 'horizontalAlignment' = .
  11. "&& 垂直方向 1靠上 ,2居中,3靠下
  12. SET PROPERTY OF gs_cells 'VerticalAlignment' = .
  13. "自动换行
  14. SET PROPERTY OF gs_cells 'WrapText' = .
  15. "设置边框属性
  16. GET PROPERTY OF gs_cells 'borders' = gs_borders .
  17. SET PROPERTY OF gs_borders 'weight' = ''.
  18. SET PROPERTY OF gs_borders 'linestyle' = p_linestyle.
  19. "设置字体属性
  20. CALL METHOD OF gs_cells 'FONT' = gs_font.
  21. SET PROPERTY OF gs_font 'BOLD' = p_bold. "1:粗体 0:普通字体
  22. SET PROPERTY OF gs_font 'SIZE' = p_size. "字体大小
  23. "设置单元格的值
  24. SET PROPERTY OF gs_cells 'VALUE' = p_value.
  25.  
  26. FREE OBJECT gs_font.
  27. FREE OBJECT gs_borders.
  28. FREE OBJECT gs_cells.
  29.  
  30. ENDFORM.

3.2居中填充单元格

  1. FORM fill_cell_gs2 USING p_r1
  2. p_r2
  3. p_bold
  4. p_size
  5. p_linestyle
  6. p_value.
  7. CALL METHOD OF gs_excel 'CELLS' = gs_cells EXPORTING # = p_r1 # = p_r2.
  8. * 设置被选中单元格的对齐方式
  9. " && 水平方向 2左对齐,3居中,4右对齐
  10. SET PROPERTY OF gs_cells 'horizontalAlignment' = .
  11. "&& 垂直方向 1靠上 ,2居中,3靠下
  12. SET PROPERTY OF gs_cells 'VerticalAlignment' = .
  13. "自动换行
  14. SET PROPERTY OF gs_cells 'WrapText' = .
  15. "设置边框属性
  16. GET PROPERTY OF gs_cells 'borders' = gs_borders .
  17. SET PROPERTY OF gs_borders 'weight' = ''.
  18. SET PROPERTY OF gs_borders 'linestyle' = p_linestyle.
  19. "设置字体属性
  20. CALL METHOD OF gs_cells 'FONT' = gs_font.
  21. SET PROPERTY OF gs_font 'BOLD' = p_bold. "1:粗体 0:普通字体
  22. SET PROPERTY OF gs_font 'SIZE' = p_size. "字体大小
  23. "设置单元格的值
  24. SET PROPERTY OF gs_cells 'VALUE' = p_value.
  25.  
  26. FREE OBJECT gs_font.
  27. FREE OBJECT gs_borders.
  28. FREE OBJECT gs_cells.
  29.  
  30. ENDFORM.

4.插入行:

  1. *&---------------------------------------------------------------------*
  2. *& excel中的指定行插入N
  3. *&---------------------------------------------------------------------*
  4. FORM excel_row_insert USING lcobj_sheet
  5. lc_row
  6. lc_count.
  7. DATA lc_range TYPE ole2_object.
  8. DATA h_borders TYPE ole2_object.
  9. DATA:p_row TYPE i.
  10.  
  11. p_row = lc_row - .
  12. DO lc_count TIMES.
  13. CALL METHOD OF lcobj_sheet 'Rows' = lc_range
  14. EXPORTING # = p_row.
  15. CALL METHOD OF lc_range 'Copy'.
  16. "copy第6行插入一个新行
  17. CALL METHOD OF lcobj_sheet 'Rows' = lc_range
  18. EXPORTING # = p_row.
  19. CALL METHOD OF lc_range 'Insert'.
  20. CALL METHOD OF lc_range 'ClearContents'. "是否需要清空Cell
  21. ENDDO.
  22. ENDFORM. "excel_row_insert

5.正式的数据填充。excel打开,关闭,保存

  1. CREATE OBJECT gs_excel 'EXCEL.APPLICATION'.
  2. *设置EXCEL可见
  3. SET PROPERTY OF gs_excel 'Visible' = .
  4. *创建工作表
  5. CALL METHOD OF gs_excel 'Workbooks' = gs_workbook.
  6.  
  7. CALL METHOD OF gs_workbook 'Open'
  8. EXPORTING
  9. # = gv_file3. "打开上面下载路径下的excel文件
  10. *选中相应sheet设置名称
  11. CALL METHOD OF gs_excel 'WORKSHEETS' = gs_sheet
  12. EXPORTING
  13. # = .
  14. CALL METHOD OF gs_sheet 'Select' .
  15. CALL METHOD OF gs_sheet 'ACTIVATE'.
  16.  
  17. ls_head-ktext = m_kunnr."利润中心先赋值
  18. SELECT SINGLE name1 INTO ls_head-m_kunnr
  19. FROM kna1 WHERE kunnr = s_kunnr-low.
  20.  
  21. CONCATENATE s_gjahr-low+() '年' s_monat-low+() '月对账单' INTO lv_str1.
  22. PERFORM fill_cell_gs2 USING: lv_str1."抬头填充
  23. PERFORM fill_cell_gs2 USING: ls_head-m_kunnr,"购买方
  24. s_kunnr-low,"客户编码
  25. * 4 4 0 11 0 s_kunnr-low,"客户编码
  26. m_bukrs."供货方
  27.  
  28. CLEAR:gs_line1.
  29. CONCATENATE '一、' s_gjahr-low '年' s_monat-low '月期间,我司按约定为贵司送货明细如下:' INTO gs_line1.
  30. PERFORM fill_cell_gs2 USING: gs_line1."
  31.  
  32. lv_cur_line = .
  33.  
  34. SORT gt_shows BY wadat_ist ASCENDING.
  35. LOOP AT gt_shows INTO gw_show.
  36. "电话联系人
  37. "ZM业务助理 供货方
  38. IF ls_head-g_cname = '' OR ls_head-ghf_tel = ''.
  39. SELECT SINGLE * INTO CORRESPONDING FIELDS OF gs_vbpa
  40. FROM vbpa
  41. WHERE vbeln = gw_show-vbeln
  42. AND parvw = 'ZM'.
  43. IF sy-subrc = .
  44. SELECT SINGLE * INTO CORRESPONDING FIELDS OF gs_pa0002
  45. FROM pa0002
  46. WHERE pernr = gs_vbpa-pernr.
  47. SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_pa0105
  48. FROM pa0105 WHERE pernr = gs_vbpa-pernr AND subty IN ('','').
  49. IF gs_pa0002-nachn <> ''.
  50. ls_head-g_cname = gs_pa0002-nachn.
  51. ENDIF.
  52. SORT gt_pa0105 BY pernr subty ASCENDING .
  53. IF ls_head-ghf_tel IS INITIAL .
  54. LOOP AT gt_pa0105.
  55. IF gt_pa0105-subty = ''.
  56. ls_head-ghf_tel = gt_pa0105-usrid.
  57. ELSEIF gt_pa0105-subty = ''.
  58. IF gt_pa0105-usrid_long+() <> ''.
  59. gt_pa0105-usrid_long+() = '-'.
  60. CONCATENATE ls_head-ghf_tel gt_pa0105-usrid_long INTO ls_head-ghf_tel SEPARATED BY '/'.
  61. CONDENSE ls_head-ghf_tel NO-GAPS.
  62. ELSE.
  63. CONDENSE gt_pa0105-usrid_long NO-GAPS.
  64. CONCATENATE ls_head-ghf_tel gt_pa0105-usrid_long INTO ls_head-ghf_tel SEPARATED BY '/'.
  65. ENDIF.
  66. ENDIF.
  67. ENDLOOP.
  68. ENDIF.
  69. ENDIF.
  70. ENDIF.
  71. "ZP 联系人 购货方
  72. IF ls_head-m_name = '' OR ls_head-m_tel = ''.
  73. SELECT SINGLE * INTO CORRESPONDING FIELDS OF gs_vbpa
  74. FROM vbpa
  75. WHERE vbeln = gw_show-vgbel
  76. AND parvw = 'ZP'.
  77. IF sy-subrc = .
  78. SELECT SINGLE * INTO CORRESPONDING FIELDS OF gs_knvk
  79. FROM knvk
  80. WHERE parnr = gs_vbpa-parnr
  81. AND kunnr = gw_show-kunnr.
  82.  
  83. SELECT SINGLE * INTO CORRESPONDING FIELDS OF gs_adcp
  84. FROM adcp
  85. WHERE persnumber = gs_vbpa-adrnp.
  86. IF gs_knvk-name1 <> ''.
  87. ls_head-m_name = gs_knvk-name1.
  88. ENDIF.
  89. IF gs_adcp-tel_number <> ''.
  90. ls_head-m_tel = gs_adcp-tel_number.
  91. ENDIF.
  92. IF gs_adcp-fax_number <> ''.
  93. CONCATENATE ls_head-m_tel gs_adcp-fax_number INTO ls_head-m_tel SEPARATED BY '/'.
  94. ENDIF.
  95. ENDIF.
  96. ENDIF.
  97. "电话联系人
  98.  
  99. PERFORM fill_cell_gs USING:lv_cur_line gw_show-wadat_ist,
  100. lv_cur_line gw_show-bstkd,
  101. lv_cur_line gw_show-vbeln,
  102. lv_cur_line gw_show-arktx,
  103. lv_cur_line gw_show-zgg,
  104. lv_cur_line gw_show-vrkme,
  105. lv_cur_line gw_show-lfimg,
  106. lv_cur_line gw_show-zdj,
  107. lv_cur_line gw_show-kzwi1.
  108. lv_count = lv_count + gw_show-kzwi1.
  109. lv_cur_line = lv_cur_line + .
  110. AT LAST.
  111. gv_flag = 'X'.
  112. PERFORM fill_cell_gs USING:lv_cur_line lv_count."汇总金额
  113. lv_cur_line = lv_cur_line + .
  114. ENDAT.
  115.  
  116. IF gv_flag = ''.
  117. PERFORM excel_row_insert USING:gs_sheet lv_cur_line ."未结束,插入空白行 等待下一循环
  118. ENDIF.
  119. ENDLOOP.
  120.  
  121. "set
  122. PERFORM fill_cell_gs2 USING: ls_head-g_cname."供货方联系人信息
  123. PERFORM fill_cell_gs2 USING: ls_head-ghf_tel."
  124. PERFORM fill_cell_gs2 USING: ls_head-m_name."购货方联系人信息
  125. PERFORM fill_cell_gs2 USING: ls_head-m_tel."
  126. "set
  127.  
  128. "截止,货款余额
  129. READ TABLE gt_kxmx WITH KEY kunnr = gw_show-kunnr.
  130. IF sy-subrc = .
  131. gt_kxmx-dm1 = gt_kxmx-dm1 + lv_count.
  132. WRITE gt_kxmx-dm1 TO lv_swzf.
  133. WRITE gt_kxmx-wgq TO lv_wgq.
  134. WRITE gt_kxmx-ygq TO lv_ygq.
  135. ENDIF.
  136. CLEAR:gs_line1.
  137. CONCATENATE '二、截止' s_bldat-high+() '年' s_bldat-high+() '月' s_bldat-high+() '日, '
  138. ls_head-m_kunnr '尚未支付广东正业科技股份有限公司' ls_head-ktext '货款 ' lv_swzf ' 元,'
  139. '其中本月未过期货款 ' lv_wgq ' 元,已到期货款 ' lv_ygq ' 元,具体明细如下:'
  140. INTO gs_line1.
  141. * CONDENSE gs_line1 NO-GAPS."去空格
  142. PERFORM fill_cell_gs2 USING:lv_cur_line gs_line1."
  143. lv_cur_line = lv_cur_line + ."未清清单开始需加2
  144.  
  145. CLEAR:gv_flag.
  146. SORT ct_bsid BY gjahr ASCENDING monat ASCENDING.
  147. LOOP AT ct_bsid.
  148. PERFORM fill_cell_gs USING:lv_cur_line ct_bsid-gjahr,"
  149. lv_cur_line ct_bsid-monat,"月
  150. lv_cur_line ct_bsid-dmbtr."未清合计
  151. lv_cur_line = lv_cur_line + .
  152. AT LAST.
  153. gv_flag = 'X'.
  154. ENDAT.
  155. IF gv_flag = ''.
  156. PERFORM excel_row_insert USING:gs_sheet lv_cur_line ."未结束,插入空白行 等待下一循环
  157. ENDIF.
  158. ENDLOOP.
  159.  
  160. IF ct_bsid[] IS INITIAL..
  161. lv_cur_line = lv_cur_line + ."add by ly 20160216
  162. ENDIF.
  163.  
  164. CLEAR gs_line1.
  165. CONCATENATE '请 ' ls_head-m_kunnr '收到本对账单之日起于5个工作日内予以签章确认,并回传至广东正业科技股份有限公司。'
  166. '否则,广东正业科技股份有限公司视同贵司对本账单确认无误!' INTO gs_line1.
  167. PERFORM fill_cell_gs2 USING:lv_cur_line gs_line1."
  168. PERFORM merged USING lv_cur_line lv_cur_line ."不知道什么原因,多出个边框
  169.  
  170. lv_cur_line = lv_cur_line + .
  171. PERFORM fill_cell_gs2 USING:lv_cur_line ls_head-g_cname."供货方制表
  172. PERFORM fill_cell_gs2 USING:lv_cur_line ls_head-m_kunnr."购货方
  173.  
  174. lv_cur_line = lv_cur_line + .
  175. PERFORM fill_cell_gs2 USING:lv_cur_line sy-datum."制表日期
  176.  
  177. GET PROPERTY OF gs_excel 'ActiveWorkbook' = gs_workbook.
  178. CALL METHOD OF gs_workbook 'SAVE'.
  179. IF sy-subrc = .
  180. MESSAGE '数据已导出' TYPE 'S'.
  181. ELSE.
  182. MESSAGE '数据导出失败' TYPE 'S' DISPLAY LIKE 'E'.
  183. ENDIF.
  184. *
  185. CALL METHOD OF gs_workbook 'CLOSE'.
  186. CALL METHOD OF gs_excel 'QUIT'.
  187. FREE OBJECT gs_sheet.
  188. FREE OBJECT gs_workbook.
  189. FREE OBJECT gs_excel.

剩下的自己研究。。。

OLE填充EXCEL的更多相关文章

  1. OLE填充EXCEL 多SHEET

    "1 设置行高 "参数说明:行/列号.行高/列宽.R-行 C-列 FORM row_column USING p_r p_width p_type. CASE p_type. WH ...

  2. (原创)带模板的OLE输出EXCEL

    其实带模板的OLE输出EXCEL就是将要输出的EXCEL中一些拥有固定值(如标题,表头行等)的单元格先填充好数据和设置好格式后作为模板上传到SAP 中.这样后续在输出EXCEL时只需从SAP中将模板下 ...

  3. OLE操作Excel编译错误处理

      Excel在公司用的很多,而这个东西我用的不是很好,就想用程序来处理,遇到很多错误.这几天研究了下OLE操作Excel.环境:VS2008 SP1+Excel 2007 加入OLE Type Li ...

  4. 2018年,请不要再使用OLE生成EXCEL文件

    输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...

  5. C# 填充Excel

    1.添加引用 Microsoft.Office.Interop.Excel; 2.使用命名空间 using Microsoft.Office.Interop.Excel; 3.填充EXCEL单元格方法 ...

  6. (原创)不带模板的OLE输出EXCEL

    目前我已知的EXCEL输出方式有3种: 1.GUI_DOWNLOAD函数输出(适用于简单无格式要求的输出). 2.OLE输出(适用于对EXCEL格式输出有特殊要求的,但是因其填充数据和设置格式是基于一 ...

  7. 使用Win32::OLE操作Excel——Excel对象模型

    像VBA操作Excel一样,Win32::OLE模块也是通过对象操作来控制Excel. 如果想自动化操作和控制Excel应用程序,则必须要与Excel对象模型所提供的对象进行交互.理解和熟悉Excel ...

  8. C# 填充Excel图表、图例背景色

    填充背景色,一般可以选择多种不同样式来填充背景,包括填充为纯色背景.渐变背景.图片背景或者纹理背景等.下面的内容将分别介绍通过C#来设置Excel中图表背景色.以及图表中的图例背景色的方法. 使用工具 ...

  9. c#用object将datatable快速填充excel后下载表格后打不开的问题

    最近在用c#的asp.net,需要批量导出数据.原本用的是stringbuilder逐个填充,但是只能做到html强制格式转换为xls,这不是真正的excel表格,所以在网上找了datatable快速 ...

随机推荐

  1. C# 线程(四):生产者和消费者

    From : http://kb.cnblogs.com/page/42530/ 前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时 ...

  2. Codeforces Round #279 (Div. 2) E. Restoring Increasing Sequence 二分

    E. Restoring Increasing Sequence time limit per test 1 second memory limit per test 256 megabytes in ...

  3. DOM综合案例、SAX解析、StAX解析、DOM4J解析

    今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * ...

  4. Timer 实现2秒4秒连环炸

    package com.cn.gbx; import java.util.Date; import java.util.Timer; import java.util.TimerTask; //cla ...

  5. [转]-如何将Eclipse中的项目迁移到Android Studio 中

    英文地址:http://developer.android.com/sdk/installing/migrate.html 翻译:Android Studio 中文组(大锤译) 如果你之前有用Ecli ...

  6. 流媒体基础实践之——RTMP直播推流

    一.RTMP推流:用户可将RTMP视频流推送到阿麦提供的打流地址.地址格式类似于: rtmp://livepush.myqcloud.com/live 现在可以支持哪些直播源?和那些直播软件?推流参数 ...

  7. spring事务知识

    事务的传播行为? 在Spring 的事务中, _可以通过 propagation 来定义事务的传播行为_: PROPAGATION_required:如果当前没有事务,就新建一个事务,如果已经存在一个 ...

  8. 树的计数 + prufer序列与Cayley公式 学习笔记

    首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.ne ...

  9. Corelocation及地图控件学习笔记

    Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...

  10. Git学习(3)创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...