1、SMW0上载模板
(还可以实现excle合并操作(合并后使用的位置是合并的第一格的位置),字体大小,粗细,颜色等,需要自行探索)
*下载模板
DATA: LO_OBJDATA LIKE WWWDATATAB,
LO_MIME LIKE W3MIME,
LC_FILENAME TYPE STRING VALUE '工业企业产值计算',
LC_FULLPATH TYPE STRING VALUE 'D:\',
LC_PATH TYPE STRING VALUE 'D:\',
LS_DESTINATION LIKE RLGRAP-FILENAME,
LS_OBJNAM TYPE STRING,
LI_RC LIKE SY-SUBRC,
LS_ERRTXT TYPE STRING.
DATA: P_OBJID TYPE WWWDATATAB-OBJID,
P_DEST LIKE SAPB-SAPPFAD.
P_OBJID = 'ZSD126E'. "此处为EXCEL模板名称
"写入时行列计数
DATA:LV_COL TYPE I,
LV_ROW TYPE I.
"EXCEL名称修改
LC_FILENAME = P_GJAHR && '年' && P_MONAT && '月-' && LC_FILENAME && P_BUKRS.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG "调用保存对话框
EXPORTING
DEFAULT_EXTENSION = 'XLS'
DEFAULT_FILE_NAME = LC_FILENAME
CHANGING
FILENAME = LC_FILENAME
PATH = LC_PATH
FULLPATH = LC_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC = 0.
P_DEST = LC_FULLPATH.
* concatenate p_objid ".XLS" into ls_objnam.
CONDENSE LS_OBJNAM NO-GAPS.
SELECT SINGLE RELID OBJID FROM WWWDATA INTO CORRESPONDING FIELDS OF LO_OBJDATA
WHERE SRTF2 = 0 AND RELID = 'MI' AND OBJID = P_OBJID.
*检查表wwwdata中是否存在所指定的模板文件
IF SY-SUBRC NE 0 OR LO_OBJDATA-OBJID EQ SPACE."如果不存在,则给出错误提示
CONCATENATE '模板文件' LS_OBJNAM '不存在' INTO LS_ERRTXT.
MESSAGE LS_ERRTXT TYPE 'I'.
ENDIF.
LS_DESTINATION = P_DEST. "保存路径
*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LO_OBJDATA
DESTINATION = LS_DESTINATION
IMPORTING
RC = LI_RC.
IF LI_RC NE 0.
CONCATENATE '模板文件:' LS_OBJNAM '下载失败' INTO LS_ERRTXT.
MESSAGE LS_ERRTXT TYPE 'E'.
ENDIF.
* fname = ls_destination.
ENDIF.
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.
CALL METHOD OF EXCEL 'WORKBOOKS' = BOOKS.
CALL METHOD OF BOOKS 'OPEN'
EXPORTING
#1 = LC_FULLPATH.
CALL METHOD OF EXCEL 'WORKSHEETS' = SHEET EXPORTING #1 = 1.
CALL METHOD OF SHEET 'ACTIVATE'.
CALL METHOD OF EXCEL 'CELLS' = CELL EXPORTING #1 = 1 #2 = 1.
DATA(LIT_DIS) = IT_ITAB.
READ TABLE LIT_DIS INTO DATA(LW_HEAD) INDEX 1.
SELECT
SINGLE
BUTXT
FROM T001
INTO @DATA(LV_BUTXT)
WHERE BUKRS = @P_BUKRS.
LV_BUTXT = '企业名称:' && LV_BUTXT.
DATA LV_YEAR TYPE STRING.
"CONCATENATE P_GJAHR '年' P_MONAT '月' INTO LV_YEAR.
LV_YEAR = P_GJAHR && '年' && P_MONAT && '月'.
"法人代码:144552023
DATA LV_CODE TYPE STRING.
CASE P_BUKRS.
WHEN '1200'.
LV_CODE = '法人代码:91330212786794630R'.
WHEN '1100'.
LV_CODE = '法人代码:913302001445520238'.
WHEN '3000'.
LV_CODE = '法人代码:91330212698210535Y'.
ENDCASE.
"LV_CODE = '法人代码:144552023'.
PERFORM FILL_CELL USING 2 1 LV_CODE ''.
"公司名称/年分写入
PERFORM FILL_CELL USING 3 1 LV_BUTXT ''.
PERFORM FILL_CELL USING 3 7 LV_YEAR ''.
"根据模板位置写入
LV_COL = 8.
LOOP AT IT_ITAB INTO IS_ITAB.
PERFORM FILL_CELL USING LV_COL 1 IS_ITAB-ZCPDL 'X'.
PERFORM FILL_CELL USING LV_COL 2 IS_ITAB-MEINS 'X'.
IF IS_ITAB-MEINS IS NOT INITIAL.
IF IS_ITAB-ZYNP = 'Y'.
PERFORM FILL_CELL USING LV_COL 3 '是' 'X'.
ELSE.
PERFORM FILL_CELL USING LV_COL 3 '否' 'X'.
ENDIF.
ELSE.
PERFORM FILL_CELL USING LV_COL 3 '' 'X'.
ENDIF.
PERFORM FILL_CELL USING LV_COL 4 IS_ITAB-ZDJ 'X'.
PERFORM FILL_CELL USING LV_COL 5 IS_ITAB-ZCPCL 'X'.
PERFORM FILL_CELL USING LV_COL 6 IS_ITAB-ZJE 'X'.
PERFORM FILL_CELL USING LV_COL 7 IS_ITAB-ZCPCLY 'X'.
PERFORM FILL_CELL USING LV_COL 8 IS_ITAB-ZJEY 'X'.
PERFORM FILL_CELL USING LV_COL 9 IS_ITAB-ZCPSL 'X'.
PERFORM FILL_CELL USING LV_COL 10 IS_ITAB-ZJEXS 'X'.
PERFORM FILL_CELL USING LV_COL 11 IS_ITAB-ZCPSLY 'X'.
PERFORM FILL_CELL USING LV_COL 12 IS_ITAB-ZJEXSY 'X'.
LV_COL = LV_COL + 1.
ENDLOOP.
"单位负责人/填表人
PERFORM FILL_CELL USING LV_COL 1 TEXT-005 ''.
PERFORM FILL_CELL USING LV_COL 4 TEXT-006 ''.
SET PROPERTY OF EXCEL 'Visible' = 1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_CELL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_2
*& --> P_9
*& --> P_
*&---------------------------------------------------------------------*
FORM FILL_CELL USING P_I
P_J
P_VAL
P_BORD.
CALL METHOD OF EXCEL 'CELLS' = CELL
EXPORTING #1 = P_I #2 = P_J.
SET PROPERTY OF CELL 'VALUE' = P_VAL.
.
IF P_BORD = 'X'.
GET PROPERTY OF CELL 'BORDERS' = RANGE.
SET PROPERTY OF RANGE 'WEIGHT' = '2'.
SET PROPERTY OF RANGE 'LINESTYLE' = '1'.
FREE OBJECT RANGE.
ENDIF.
ENDFORM.