填充特殊格式的excel(比如有单元…

有时候需要导出有一定格式的excel文件,比如如下格式的:
填充特殊格式的excel(比如有单元格合并的)

 有时候客户是要求smartforms打印出来,
有时候客户要求下载到本地成excel文件。
下面的小例子就是导出到本地生成excel文件。
【可以使用DOI来做,本例没有使用】

一般会用smw0先上传模板,
然后客户下载时,打开模板,填充数据,最后下载到本地。
smw0使用前面已经写过了:http://blog.sina.com.cn/s/blog_c0978c9b0101evfk.html
本例使用本地的模板:
填充特殊格式的excel(比如有单元格合并的)

首先给数据行命名:rowno
仅仅命名第一条数据行,
填充特殊格式的excel(比如有单元格合并的)

然后给每一个需要赋值的单元格命名
填充特殊格式的excel(比如有单元格合并的)

其他各字段类似
代码如下:
【仅仅是主要逻辑代码,字段取值赋值部分未做详细处理】

REPORT  zlm_test_031.

INCLUDE ole2incl.
*&---------------------------------------------------------------------*
*&数据定义区
*&---------------------------------------------------------------------*

DATA:
      
"头尾信息
      
BEGIN OF str_head,
        dbd     
TYPE string            "调拨单号
        hz      
TYPE string            "汇总信息
        dcdw    
TYPE string            "调出单位
        dcck    
TYPE string            "调入仓库
        lxfs    
TYPE string            "联系方式
        drdw    
TYPE string            "调入单位
        drdd    
TYPE string            "调入地点
        ddrq    
TYPE string            "调动日期
        
END OF str_head,

      
"数据信息
      
BEGIN OF str_data,
        xh      
TYPE string             "序号
        matnr   
TYPE string             "物料编码
        maktx   
TYPE string             "物料描述
        ggxh    
TYPE string             "规格型号
        dw      
TYPE string             "单位
        sl      
TYPE string             "数量
        dj      
TYPE string             "单价
        zj      
TYPE string             "总价
        banfn   
TYPE string             "采购单号
        bnfpo   
TYPE string             "行项目号
        bz      
TYPE string             "备注
        
END OF str_data.

DATAl_msg       TYPE char100                                        "提示消息

DATA:
      l_head         
LIKE str_head,
      l_it_data      
LIKE TABLE OF str_data,
      l_wa_data      
LIKE LINE OF l_it_data.


*&---------------------------------------------------------------------*
*&excel相关变量定义
*&---------------------------------------------------------------------*

DATAexcelobj     TYPE ole2_object          Excel object
      wbookobj     
TYPE ole2_object          Workbook object
      wsheetobj    
TYPE ole2_object          Worksheet object
      rangeobj     
TYPE ole2_object          Range object
      cellobj      
TYPE ole2_object          Cell object
      excel_saved_name     
TYPE rlgrap-filename VALUE 'E:\PRINT.xlsx'.

*&---------------------------------------------------------------------*
*&主逻辑区
*&---------------------------------------------------------------------*
START-OF-SELECTION.


  
"组织数据
  
PERFORM zform_get_data.
  
"打开模板,创建excel文件
  
PERFORM zform_open_template_excel.
  
"填充excel文件
  
PERFORM zform_field_excel.


*&---------------------------------------------------------------------*
*&form
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  zform_open_template_excel
*&---------------------------------------------------------------------*
      text 打开模板文件
*----------------------------------------------------------------------*
FORM zform_open_template_excel.
  
CREATE OBJECT excelobj 'Excel.Application'            Create excel object
  
IF sy-subrc NE 0.
    
WRITE'Excel init failed, return code is 'sy-subrc.
    
EXIT.
  
ELSE.
    
SET PROPERTY OF excelobj 'Visible' 1              Set excel visible
    
CALL METHOD OF excelobj                               Create wbook object
    
'Workbooks' wbookobj.
    
CALL METHOD OF
        wbookobj
        
'Open'   wbookobj
      
EXPORTING
        #1       
excel_saved_name                              "srcfile1.
    
CALL METHOD OF wbookobj                               Create wsheet object
         
'Worksheets' wsheetobj EXPORTING #1 'sheet1'.
    
CALL METHOD OF
        wsheetobj
        
'Activate'.
  
ENDIF.
ENDFORM                   "zform_open_template_excel


*&---------------------------------------------------------------------*
*&      Form  zform_get_data
*&---------------------------------------------------------------------*
      text 组织数据
*----------------------------------------------------------------------*
FORM zform_get_data.

  
"头信息
  l_head
-dbd     'OOXX-2013-001'                                    "调拨单号
  l_head
-hz      '本次共调拨物资            合计金额:173100 '  "汇总信息
  l_head
-dcdw    '北京公司'                                          "调出单位
  l_head
-dcck    '北京燕郊应急物资储备仓库'                           "调入仓库
  l_head
-lxfs    '张三13910898691'                                   "联系方式
  l_head
-drdw    '青海公司'                                          "调入单位
  l_head
-drdd    '青海玉树'                                          "调入地点
  l_head
-ddrq    sy-datum                                           "调动日期


  
"数据信息
  l_wa_data
-xh      '1'                                    "序号
  l_wa_data
-matnr   '500064522'                            "物料编码
  l_wa_data
-maktx   '全方位自动泛光工作灯'                 "物料描述
  l_wa_data
-ggxh    'XL'                                   "规格型号
  l_wa_data
-dw      ''                                   "单位
  l_wa_data
-sl      '10'                                   "数量
  l_wa_data
-dj      '10679.99'                             "单价
  l_wa_data
-zj      '106799.9'                             "总价
  l_wa_data
-banfn   '3000000001'                           "采购单号
  l_wa_data
-bnfpo   '10'                                   "行项目号
  l_wa_data
-bz      '正常'                                 "备注

  
APPEND l_wa_data TO l_it_data.
  
CLEAR l_wa_data.

  l_wa_data
-xh      '2'                                    "序号
  l_wa_data
-matnr   '500064523'                            "物料编码
  l_wa_data
-maktx   '工作灯(不带发电机)'                 "物料描述
  l_wa_data
-ggxh    'SL'                                   "规格型号
  l_wa_data
-dw      ''                                   "单位
  l_wa_data
-sl      '20'                                   "数量
  l_wa_data
-dj      '3315.005'                             "单价
  l_wa_data
-zj      '66300.1'                             "总价
  l_wa_data
-banfn   '3000000001'                           "采购单号
  l_wa_data
-bnfpo   '10'                                   "行项目号
  l_wa_data
-bz      '正常'                                 "备注
  
APPEND l_wa_data TO l_it_data.
  
CLEAR l_wa_data.

ENDFORM                   "zform_get_data

*&---------------------------------------------------------------------*
*&      Form  zform_field_excel
*&---------------------------------------------------------------------*
      text  填充excel文件
*----------------------------------------------------------------------*
FORM zform_field_excel.

  
"填充头
  
PERFORM fill_range USING 'DBD'    l_head-dbd               "调拨单号
  
PERFORM fill_range USING 'HZ'     l_head-hz                "汇总信息
  
PERFORM fill_range USING 'DCDW'   l_head-dcdw              "调出单位
  
PERFORM fill_range USING 'DCKW'   l_head-dcck              "调入仓库
  
PERFORM fill_range USING 'LXFS'   l_head-lxfs              "联系方式
  
PERFORM fill_range USING 'DRDW'   l_head-drdw              "调入单位
  
PERFORM fill_range USING 'DRDD'   l_head-drdd              "调入地点
  
PERFORM fill_range USING 'DDRQ'   l_head-ddrq              "调动日期

  
"填充数据行
  
LOOP AT l_it_data INTO l_wa_data.
    
PERFORM fill_range USING 'XH'      l_wa_data-xh         "序号
    
PERFORM fill_range USING 'MATNR'   l_wa_data-matnr      "物料编码
    
PERFORM fill_range USING 'MAKTX'   l_wa_data-maktx      "物料描述
    
PERFORM fill_range USING 'GGXH   l_wa_data-ggxh       "规格型号
    
PERFORM fill_range USING 'DW'      l_wa_data-dw         "单位
    
PERFORM fill_range USING 'SL'      l_wa_data-sl         "数量
    
PERFORM fill_range USING 'DJ'      l_wa_data-dj         "单价
    
PERFORM fill_range USING 'ZJ'      l_wa_data-zj         "总价
    
PERFORM fill_range USING 'BANFN'   l_wa_data-banfn      "采购单号
    
PERFORM fill_range USING 'BNFPO'   l_wa_data-bnfpo      "行项目号
    
PERFORM fill_range USING 'BZ'      l_wa_data-bz         "备注

    
PERFORM insert_row USING 'ROWNO'.                           "插入一新行,必须!
  
ENDLOOP.

  
"保存
  
PERFORM fill_save USING excel_saved_name.

  
"释放资源
  
CALL METHOD OF
      wbookobj
      
'CLOSE'.

  
CALL METHOD OF
      excelobj
      
'QUIT'.


  
FREE OBJECT rangeobj       .
  
FREE OBJECT wsheetobj      .
  
FREE OBJECT wbookobj       .
  
FREE OBJECT excelobj       .

ENDFORM                   "zform_print


***********************************************************************
*&EXCEL执行用的form
***********************************************************************
*---------------------------------------------------------------------*
      FORM insert_row                                               *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
 -->  VALUE(F_RANGE)                                                *
*---------------------------------------------------------------------*
FORM insert_row USING value(f_range).
  
CALL METHOD OF
      wsheetobj
      
'range'   rangeobj
    
EXPORTING
      #1        
f_range.
  
CALL METHOD OF
      rangeobj
      
'copy'.
  
CALL METHOD OF
      rangeobj
      
'select'.
  
CALL METHOD OF
      rangeobj
      
'insert'.
  
CALL METHOD OF
      rangeobj
      
'clearcontents'.
ENDFORM                   "insert_row
*---------------------------------------------------------------------*
      FORM fill_range                                               *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
 -->  VALUE(F_RANGE)                                                *
 -->  VALUE(F_VALUE)                                                *
*---------------------------------------------------------------------*
FORM fill_range USING value(f_range)
                      
value(f_value).
  
CALL METHOD OF
      wsheetobj
      
'Range'   rangeobj
    
EXPORTING
      #1        
f_range.
  
SET PROPERTY OF rangeobj 'Value' f_value.
ENDFORM                   "fill_range
*---------------------------------------------------------------------*
      FORM fill_COPY                                                *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
FORM fill_copy.
  
CALL METHOD OF
      excelobj
      
'run'

    
EXPORTING
      #1       
'COPY'.
ENDFORM                   "fill_copy
*---------------------------------------------------------------------*
      FORM fill_rowno                                               *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
FORM fill_rowno.
  
CALL METHOD OF
      excelobj
      
'run'

    
EXPORTING
      #1       
'ROWNO'.
ENDFORM                   "fill_rowno
*---------------------------------------------------------------------*
      FORM fill_delrows                                             *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
FORM fill_delrows.
  
CALL METHOD OF
      excelobj
      
'run'

    
EXPORTING
      #1       
'DELROWS'.
ENDFORM                   "fill_delrows
*---------------------------------------------------------------------*
      FORM fill_run                                                 *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
 -->  VALUE(NAME)                                                   *
*---------------------------------------------------------------------*
FORM fill_run USING value(name).
  
CALL METHOD OF
      excelobj
      
'run'

    
EXPORTING
      #1       
name.
ENDFORM                   "fill_run
*---------------------------------------------------------------------*
      FORM fill_save                                                *
*---------------------------------------------------------------------*
      ........                                                      *
*---------------------------------------------------------------------*
 -->  VALUE(F_SAVE)                                                 *
*---------------------------------------------------------------------*
FORM fill_save USING value(f_save).
  
CALL METHOD OF
      wbookobj
      
'SaveAs' wbookobj
    
EXPORTING
      #1       
f_save.
ENDFORM                   "fill_save



可能里面部分excel的方法没有用到,也没做删除

posted @ 2014-01-22 09:23  胡来  阅读(401)  评论(0编辑  收藏  举报