我这个是比较不规则的数据填充

1.程序开头,定义一个工作区,存对应单元格的值:

      BEGIN OF TY_EXCEL,
C031() TYPE C,
C032() TYPE C,
C033() TYPE C,
C034() TYPE C,
C035() TYPE C,
C036() TYPE C,
C052() TYPE C,
C054() TYPE C,
C056() TYPE C,
C058() TYPE C,
C091() TYPE C,
C151() TYPE C,
C152() TYPE C,
C153() TYPE C,
C154() TYPE C,
C155() TYPE C,
C156() TYPE C,
C157() TYPE C,
C158() TYPE C,
C181() TYPE C,
C182() TYPE C,
C183() TYPE C,
C184() TYPE C,
C185() TYPE C,
C186() TYPE C,
C187() TYPE C,
C188() TYPE C,
END OF TY_EXCEL.

DOI一些变量定义:

DATA: DOCUMENT_NAME() VALUE 'ZHRR010',
ACTIVE_SHEET() VALUE 'Sheet1'.
CONSTANTS INPLACE VALUE 'X'. DATA: CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
CONTROL TYPE REF TO I_OI_CONTAINER_CONTROL,
DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY,
SPREADSHEET TYPE REF TO I_OI_SPREADSHEET,
ERROR TYPE REF TO I_OI_ERROR,
ERRORS TYPE REF TO I_OI_ERROR OCCURS WITH HEADER LINE.
DATA: RANGEITEM TYPE SOI_RANGE_ITEM.
DATA: RANGES TYPE SOI_RANGE_LIST.
DATA: EXCEL_INPUT TYPE SOI_GENERIC_TABLE.
DATA: EXCEL_INPUT_WA TYPE SOI_GENERIC_ITEM.
DATA: INITIALIZED(), RETCODE TYPE SOI_RET_STRING.
DATA: ITEM_URL(), ALREADY_DONE, NEWNAME().
DATA DOCUMENT_TYPE().
DATA: EXCEL() VALUE 'Excel.Sheet'.
DATA: LINE_COUNT TYPE I,
COLUMN_COUNT TYPE I.
DATA: OK_CODE LIKE SY-UCOMM.

主屏幕上画个CONTAINER。

单元格填充

FORM FILL_CELL_01  USING I J VAL.
DATA: COLUMNS_NUMBER TYPE I,
ROWS_NUMBER TYPE I. COLUMNS_NUMBER = .
ROWS_NUMBER = . CALL METHOD SPREADSHEET->INSERT_RANGE_DIM
EXPORTING
NAME = 'cell'
NO_FLUSH = 'X'
TOP = I
LEFT = J
ROWS = ROWS_NUMBER
COLUMNS = COLUMNS_NUMBER
IMPORTING
ERROR = ERRORS.
APPEND ERRORS. REFRESH: RANGES, EXCEL_INPUT.
RANGEITEM-NAME = 'cell'.
RANGEITEM-COLUMNS = .
RANGEITEM-ROWS = .
APPEND RANGEITEM TO RANGES. EXCEL_INPUT_WA-COLUMN = .
EXCEL_INPUT_WA-ROW = .
EXCEL_INPUT_WA-VALUE = VAL.
APPEND EXCEL_INPUT_WA TO EXCEL_INPUT. * set data
CALL METHOD SPREADSHEET->SET_RANGES_DATA
EXPORTING
RANGES = RANGES
CONTENTS = EXCEL_INPUT
NO_FLUSH = 'X'
IMPORTING
ERROR = ERRORS.
APPEND ERRORS. CALL METHOD SPREADSHEET->FIT_WIDEST
EXPORTING
NAME = SPACE
NO_FLUSH = 'X'. REFRESH: RANGES, EXCEL_INPUT. ENDFORM. "fill_cell

PBO

MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'STATUS_9000'.
* SET TITLEBAR 'xxx'.
* 创建EXCEL模板
PERFORM CREATE_BASIC_OBJECTS USING '' '' '' '' DOCUMENT_NAME.
* 输出EXCEL
PERFORM OUTPUT_TO_EXCEL.
ENDMODULE.
FORM CREATE_BASIC_OBJECTS  USING   P_APP_NAME
P_CLASSNAME
P_CLASSTYPE
P_OBJ_KEY
P_DOCNAME. DATA L_APP_NAME().
DATA: BDS_INSTANCE TYPE REF TO CL_BDS_DOCUMENT_SET.
DATA: DOC_SIGNATURE TYPE SBDST_SIGNATURE,
WA_DOC_SIGNATURE LIKE LINE OF DOC_SIGNATURE,
DOC_COMPONENTS TYPE SBDST_COMPONENTS,
DOC_URIS TYPE SBDST_URI,
WA_DOC_URIS LIKE LINE OF DOC_URIS.
DATA: DOC_CLASSNAME TYPE SBDST_CLASSNAME VALUE 'PICTURES',
DOC_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE 'OT',
DOC_OBJECT_KEY TYPE SBDST_OBJECT_KEY VALUE 'EXCEL'. CHECK INITIALIZED IS INITIAL. * 处理参数
IF P_APP_NAME IS INITIAL.
L_APP_NAME = 'R/3 Reporter'.
ELSE.
L_APP_NAME = P_APP_NAME.
ENDIF. IF NOT ( P_CLASSNAME IS INITIAL OR P_CLASSTYPE IS INITIAL
OR P_OBJ_KEY IS INITIAL ).
DOC_CLASSNAME = P_CLASSNAME.
DOC_CLASSTYPE = P_CLASSTYPE.
DOC_OBJECT_KEY = P_OBJ_KEY.
ENDIF. * 创建容器控制器实例
CALL METHOD C_OI_CONTAINER_CONTROL_CREATOR=>GET_CONTAINER_CONTROL
IMPORTING
CONTROL = CONTROL
ERROR = ERROR.
CALL METHOD ERROR->RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
* 创建屏幕上的容器对象
CREATE OBJECT CONTAINER
EXPORTING
CONTAINER_NAME = 'CONTAINER'. * 初始化容器控制器
CALL METHOD CONTROL->INIT_CONTROL
EXPORTING
R3_APPLICATION_NAME = L_APP_NAME
INPLACE_ENABLED = INPLACE
INPLACE_SCROLL_DOCUMENTS = 'X'
PARENT = CONTAINER
REGISTER_ON_CLOSE_EVENT = 'X'
REGISTER_ON_CUSTOM_EVENT = 'X'
NO_FLUSH = 'X'
IMPORTING
ERROR = ERRORS.
APPEND ERRORS.
CLEAR ITEM_URL. WA_DOC_SIGNATURE-PROP_NAME = 'DESCRIPTION'.
DOCUMENT_TYPE = EXCEL.
WA_DOC_SIGNATURE-PROP_VALUE = DOCUMENT_TYPE. APPEND WA_DOC_SIGNATURE TO DOC_SIGNATURE.
* BDS对象实例化
CREATE OBJECT BDS_INSTANCE.
* 读取BDS内容(模板)
CALL METHOD BDS_INSTANCE->GET_INFO
EXPORTING
CLASSNAME = DOC_CLASSNAME
CLASSTYPE = DOC_CLASSTYPE
OBJECT_KEY = DOC_OBJECT_KEY
CHANGING
COMPONENTS = DOC_COMPONENTS
SIGNATURE = DOC_SIGNATURE.
* 读取BDS的URL
CALL METHOD BDS_INSTANCE->GET_WITH_URL
EXPORTING
CLASSNAME = DOC_CLASSNAME
CLASSTYPE = DOC_CLASSTYPE
OBJECT_KEY = DOC_OBJECT_KEY
CHANGING
URIS = DOC_URIS
SIGNATURE = DOC_SIGNATURE. FREE BDS_INSTANCE.
LOOP AT DOC_URIS INTO WA_DOC_URIS.
SEARCH WA_DOC_URIS-URI FOR 'ZHRR010'.
IF SY-SUBRC = .
ITEM_URL = WA_DOC_URIS-URI.
ENDIF.
ENDLOOP.
* READ TABLE DOC_URIS INTO WA_DOC_URIS INDEX 3.
* ITEM_URL = WA_DOC_URIS-URI. * ask the SAP DOI container for a i_oi_document_proxy for Excel
* 容器控制器获得一个EXCEL文档代理
CALL METHOD CONTROL->GET_DOCUMENT_PROXY
EXPORTING
DOCUMENT_TYPE = 'Excel.Sheet1'
NO_FLUSH = 'X'
IMPORTING
DOCUMENT_PROXY = DOCUMENT
ERROR = ERRORS.
APPEND ERRORS. * open a document saved in business document service.
* 容器控制器中打开指定BDS返回的文档
CALL METHOD DOCUMENT->OPEN_DOCUMENT
EXPORTING
OPEN_INPLACE = INPLACE
DOCUMENT_URL = ITEM_URL. DATA: HAS TYPE I.
CALL METHOD DOCUMENT->HAS_SPREADSHEET_INTERFACE
EXPORTING
NO_FLUSH = ''
IMPORTING
IS_AVAILABLE = HAS
ERROR = ERRORS.
APPEND ERRORS.
CALL METHOD DOCUMENT->GET_SPREADSHEET_INTERFACE
EXPORTING
NO_FLUSH = ' '
IMPORTING
SHEET_INTERFACE = SPREADSHEET
ERROR = ERRORS.
APPEND ERRORS. * Activate sheet
CALL METHOD SPREADSHEET->SELECT_SHEET
EXPORTING
NAME = ACTIVE_SHEET
NO_FLUSH = ''
IMPORTING
ERROR = ERRORS.
APPEND ERRORS. *错误处理
LOOP AT ERRORS.
CALL METHOD ERRORS->RAISE_MESSAGE
EXPORTING
TYPE = 'S'.
ENDLOOP.
FREE ERRORS. INITIALIZED = 'X'. ENDFORM.
FORM OUTPUT_TO_EXCEL .
DATA:LV_LINE TYPE I.
DATA:LV_YD LIKE LINE OF GT_PA0001.
DATA:LV_COUNT TYPE I.
DATA:LT_YD TYPE TABLE OF TY_0000.
DATA:LV_GZ1 TYPE I.
DATA:LV_GZ2 TYPE I. PERFORM FILL_CELL_01 USING GW_EXCEL-C031 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C032 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C033 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C034 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C035 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C036 ."工号 IF GW_EXCEL-C054 > .
PERFORM FILL_CELL_01 USING GW_EXCEL-C052 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C054 ."工号
ENDIF. PERFORM FILL_CELL_01 USING GW_EXCEL-C056 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C058 ."工号
AUTHORITY-CHECK OBJECT 'ZHR01'
ID 'INFOTYP' FIELD ''.
IF SY-SUBRC = .
PERFORM FILL_CELL_01 USING GW_EXCEL-C091 ."工号
ENDIF. * AUTHORITY-CHECK OBJECT 'ZHR02'
* ID 'INFOTYP' FIELD '9004'.
* IF SY-SUBRC = 0.
* PERFORM FILL_CELL_01 USING 9 2 GW_EXCEL-C091 ."工号
* ENDIF. PERFORM FILL_CELL_01 USING GW_EXCEL-C151 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C152 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C153 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C154 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C155 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C156 ."工号
* PERFORM FILL_CELL_01 USING 15 7 GW_EXCEL-C157 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C158 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C181 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C182 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C183 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C184 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C185 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C186 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C187 ."工号
PERFORM FILL_CELL_01 USING GW_EXCEL-C188 ."工号 LV_LINE = .
"异动情况
SORT GT_PA0000 BY PERNR BEGDA ENDDA ASCENDING.
"绩效明细
LV_COUNT = LINES( GT_PA9002 ) - .
DO LV_COUNT TIMES.
CALL METHOD DOCUMENT->EXECUTE_MACRO
EXPORTING
MACRO_STRING = '模块4.Macro2'
IMPORTING
ERROR = ERRORS.
ENDDO. "异动明细
APPEND LINES OF GT_PA0000 TO LT_YD.
DELETE LT_YD WHERE MASSN <> 'Z3'.
LV_COUNT = LINES( LT_YD ) - .
DO LV_COUNT TIMES.
CALL METHOD DOCUMENT->EXECUTE_MACRO
EXPORTING
MACRO_STRING = '模块4.Macro1'
IMPORTING
ERROR = ERRORS.
ENDDO. "************************************工资
SORT GT_PA9004[] BY PERNR BEGDA DESCENDING.
DELETE GT_PA9004 WHERE ZJBGZ = AND ZJXGZ = AND ZZWJT =
AND ZFDJJ = AND ZTSGWJT = AND ZQTJT = . LOOP AT GT_PA0000 INTO GW_PA0000." WHERE MASSN = 'Z3'.
READ TABLE GT_PA0001 INTO GW_PA0001 WITH KEY PERNR = GW_PA0000-PERNR
BEGDA = GW_PA0000-BEGDA.
* ENDDA = GW_PA0000-ENDDA.
IF SY-SUBRC = .
IF GW_PA0000-MASSN = 'Z1' OR GW_PA0000-MASSN = 'Z2'.
MOVE-CORRESPONDING GW_PA0001 TO LV_YD."将异动前数据保存
ENDIF. IF GW_PA0000-MASSN = 'Z3'."异动
CLEAR:LV_GZ1,LV_GZ1.
READ TABLE GT_PA9004 INTO GW_PA9004 WITH KEY PERNR = GW_PA0000-PERNR
BEGDA = GW_PA0000-BEGDA.
* ENDDA = GW_PA0000-ENDDA.
IF SY-SUBRC = .
LV_GZ2 = GW_PA9004-ZJBGZ + GW_PA9004-ZJXGZ + GW_PA9004-ZZWJT
+ GW_PA9004-ZFDJJ + GW_PA9004-ZTSGWJT + GW_PA9004-ZQTJT.
ENDIF. LOOP AT GT_PA9004 INTO GW_PA9004 WHERE PERNR = GW_PA0000-PERNR.
IF GW_PA9004-BEGDA = GW_PA0000-BEGDA."当前异动后工资
LV_GZ2 = GW_PA9004-ZJBGZ + GW_PA9004-ZJXGZ + GW_PA9004-ZZWJT
+ GW_PA9004-ZFDJJ + GW_PA9004-ZTSGWJT + GW_PA9004-ZQTJT.
ELSEIF GW_PA9004-BEGDA < GW_PA0000-BEGDA."当前异动前工资
IF LV_GZ1 <> .
LV_GZ1 = GW_PA9004-ZJBGZ + GW_PA9004-ZJXGZ + GW_PA9004-ZZWJT
+ GW_PA9004-ZFDJJ + GW_PA9004-ZTSGWJT + GW_PA9004-ZQTJT.
ENDIF.
ENDIF.
ENDLOOP. PERFORM FILL_CELL_01 USING LV_LINE GW_PA0001-BEGDA ."异动时间
PERFORM FILL_CELL_01 USING LV_LINE LV_YD-ORGTX ."异动前部门
PERFORM FILL_CELL_01 USING LV_LINE LV_YD-PLSTX ."异动前岗位
AUTHORITY-CHECK OBJECT 'ZHR01'
ID 'INFOTYP' FIELD ''.
IF SY-SUBRC = .
PERFORM FILL_CELL_01 USING LV_LINE LV_GZ1 ."异动时间
PERFORM FILL_CELL_01 USING LV_LINE LV_GZ2 ."异动后工资
ENDIF. PERFORM FILL_CELL_01 USING LV_LINE GW_PA0001-ORGTX ."异动后部门
PERFORM FILL_CELL_01 USING LV_LINE GW_PA0001-PLSTX ."异动后岗位 MOVE-CORRESPONDING GW_PA0001 TO LV_YD."将异动前数据保存
LV_LINE = LV_LINE + .
ENDIF. ENDIF. ENDLOOP. "无异动,行数下移一位
IF LV_COUNT < .
LV_LINE = LV_LINE + .
ELSE."IF LV_COUNT > 1.
LV_LINE = LV_LINE + .
* ELSEIF LV_COUNT = 1.
* LV_LINE = LV_LINE + 2.
ENDIF. LOOP AT GT_PA9002 INTO GW_PA9002.
PERFORM FILL_CELL_01 USING LV_LINE GW_PA9002-ZJXNY ."绩效考核年月份
PERFORM FILL_CELL_01 USING LV_LINE GW_PA9002-ZJXZF ."绩效总分 AUTHORITY-CHECK OBJECT 'ZHR01'
ID 'INFOTYP' FIELD ''.
IF SY-SUBRC = .
PERFORM FILL_CELL_01 USING LV_LINE GW_PA9002-ZJXJJ ."奖惩金额
ENDIF.
LV_LINE = LV_LINE + .
ENDLOOP. "证书
DATA:LV_ZS() TYPE C.
LV_LINE = LV_LINE + .
LOOP AT GT_PA9003 INTO GW_PA9003.
IF GW_PA9003-ZZCZG IS NOT INITIAL.
CONCATENATE LV_ZS GW_PA9003-ZZCZG INTO LV_ZS SEPARATED BY '/'.
ENDIF.
ENDLOOP.
PERFORM FILL_CELL_01 USING LV_LINE LV_ZS ."绩效考核年月份 ENDFORM.

PAI

MODULE USER_COMMAND_9000 INPUT.
IF OK_CODE = 'BACK' .
CALL METHOD DOCUMENT->CLOSE_DOCUMENT.
FREE DOCUMENT.
CALL METHOD CONTROL->DESTROY_CONTROL.
FREE CONTROL.
SET SCREEN .
* ELSEIF OK_CODE = 'EXCEL' .
* PERFORM SUB_OUT_EXCEL .
ENDIF .
ENDMODULE.

DOI EXCEL显示报表的更多相关文章

  1. 使用C#和Excel进行报表开发(三)-生成统计图(Chart)

    有的Web项目选用Excel作为报表方案,在服务器端生成Excel文件,然后传送到客户端,由客户端进行打印.在国内的环境下,相对PDF方式,Excel的安装率应该比pdf阅读器的安装率要高,同时,微软 ...

  2. C#操作Excel开发报表系列整理(转)

    C#操作Excel进行报表开发系列共写了七篇,也已经有很久没有新东西了,现在整理一下,方便以后查阅,如果有写新的,会同时更新.需要注意的是因为Office的版本不同,实际的代码可能会有所不同,但是都是 ...

  3. EBS中 EXCEL 格式报表输出的公用API

    http://blog.itpub.net/10359218/viewspace-752601/ 最近的项目上写了一个公用的API,很久以前就用EXCEL发布过报表,但从没想过写API来简化...   ...

  4. 极速响应Excel数据报表请求的一种方法

    摘要 通过缓存和维护Excel Workbook实例,极速响应Excel数据报表请求. 这是一个真实的大数据"云计算"项目中的解决方案,在给定的时间和资源下,只有这种方法是最简单并 ...

  5. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  6. C#操作Excel开发报表系列整理

    C#操作Excel进行报表开发系列共写了八篇,也已经有很久没有新东西了,现在整理一下,方便以后查阅,如果有写新的,会同时更新.需要注意的是因为Office的版本不同,实际的代码可能会有所不同,但是都是 ...

  7. 怎么让Excel显示时间时候能把秒显示出来

    Excel显示时间一般只显示年月日小时分钟怎么能够把秒也显示出来既如下显示 2007-04-11 12:00:00 将单元格格式设为"自定义",在"类型"框中输 ...

  8. python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  9. 作为报表工具,Excel移动报表的优势和劣势

    Excel是应用最广泛的报表工具,它集数据存储.数据处理.数据分析于一身,广泛应用于各行各业的日常工作中(无论这个企业的信息化程度有多高.多低).而且随着Office365的普及,软件License的 ...

随机推荐

  1. Systematic LncRNA Classification

    Systematic LncRNA Classification From: http://www.arraystar.com/Services/Services_main.asp?ID=307 An ...

  2. [C和指针]第一部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. 【CC评网】2013.第41周 不求排版,简单就好

    书单 碰上国庆,加上这周,消化掉几本书: <软件随想录>:Joel的随想录,也就是他Blog上的文章的摘选:整本书看下来轻松:写了篇读书笔记[传送门]: <中国在梁庄>:这本书 ...

  4. 百度翻译word-wrap,页面错乱原因查找过程(已修复)

    今天群里有人发问, 进入百度翻译http://fanyi.baidu.com/#auto/zh/, 输入word-wrap,发现页面错乱. 寻找错乱原因. 上图 开始查找原因: 1.从请求入手 从ch ...

  5. CSS深入研究:display的恐怖故事解密(2) - table-cell(转)

    http://www.cnblogs.com/StormSpirit/archive/2012/10/24/2736453.html 上集<CSS深入研究:display的恐怖故事解密(1) - ...

  6. Win7路由器设置过程

    随着应用win7系统的人越来越多,对于这个系统的应用就更多了,其中大家最关注的就是这个系统和路由器上网的问题.下面,我们就来讲解一下win7系统的路由器的设置过程. 首先打开浏览器,在地址栏输入192 ...

  7. Java Abstract class and Interface

    Abstract Class 在定义class的时候必须有abstract 关键字 抽象方法必须有abstract关键字. 可以有已经实现的方法. 可以定义static final 的常量. 可以实现 ...

  8. Java中List的使用

    package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ListTest { p ...

  9. (一)mtg3000常见操作

    一.查看MTG3000主控板IP地址: 重启设备后一直跑到shell,用户名和密码都输入admin,然后输入en进入命令行界面,输入sh int可查看设备IP等信息. 2.升级app.web程序

  10. Java Ant build.xml详解

    1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台   --因为 ...