1. 程式人生 > 其它 >ABAP OLE程式DEMO

ABAP OLE程式DEMO

REPORTYYHD_OLE.

TYPES:BEGINOFTY_UPLOAD,"接收excel的結構
BUKRSTYPECHAR50,"公司程式碼
ANLN1TYPECHAR50,"資產號
GGJAHRTYPECHAR50,"年度
AFPERTYPECHAR50,"月份
GSTZAHLTYPECHAR50,"總量
STZAHLTYPECHAR50,"實際用量
ENDOFTY_UPLOAD.

TYPES:BEGINOFTY_CHECK_UPLOAD,"接收資料處理後的結構
BUKRSTYPEBUKRS,
ANLN1TYPEANLN1,
GGJAHRTYPEGGJAHR,
AFPERTYPEAFPER,
GSTZAHLTYPEGSTZAHL,
STZAHLTYPESTZAHL,
ENDOFTY_CHECK_UPLOAD.


DATA:LT_UPLOADTYPETABLEOFTY_UPLOAD,"接收excel的內表
LS_UPLOADTYPETY_UPLOAD,"接收excel的工作區
P_BUKRSTYPECHAR4,"用於對公司程式碼做檢查
LV_BOOLEANTYPEBOOLEAN,"檔案路徑是否存在返回結果
LT_CHECK_UPLOADTYPETABLEOFTY_CHECK_UPLOAD,"接收資料處理後的內表
LS_CHECK_UPLOADTYPETY_CHECK_UPLOAD,"接收資料處理後的工作區
LT_LINESTYPETABLEOFALSMEX_TABLINE,"接收Excel資料的表
LS_LINESTYPEALSMEX_TABLINE,
LV_RCTYPEI,"將內表資料放到excel剪下板操作的返回程式碼
LT_FILE_TABLETYPEFILETABLE,"接收上傳檔案路徑用
LS_FILE_TABLETYPEFILE_TABLE,
GS_LAYOTYPELVC_S_LAYO,"ALV顯示畫面用
GT_FCATTYPELVC_T_FCAT."ALV欄位格式設定用

"定義下載模板相關資料
DATA:APPLICATIONTYPEOLE2_OBJECT,"excelobject
WORKBOOKTYPEOLE2_OBJECT,"excelworkbookobjcet
SHEETTYPEOLE2_OBJECT,"workbooksheetobject
COLUMNSTYPEOLE2_OBJECT,"sheetcolobjcet
ROWSTYPEOLE2_OBJECT,"sheetrowobjcet
RANGETYPEOLE2_OBJECT,"range
RANGE1TYPEOLE2_OBJECT,"range1
FONTTYPEOLE2_OBJECT,"font
CELLTYPEOLE2_OBJECT,"cell
CELL1TYPEOLE2_OBJECT,"cell1
SHEET1TYPEOLE2_OBJECT,"workbooksheetobject
BORDERSTYPEOLE2_OBJECT."borders



SELECTION-SCREENBEGINOFBLOCK1."選擇畫面
PARAMETERS:GV_PATHTYPECHAR255.
SELECTION-SCREENENDOFBLOCK1.

INITIALIZATION.

ATSELECTION-SCREENONVALUE-REQUESTFORGV_PATH."給路徑設定f4幫助
PERFORMFRM_SCR_F4CHANGINGLT_FILE_TABLE.

*PERFORMFRM_CHECK_FILEPATHUSINGlv_path."檢查路徑是否正確

START-OF-SELECTION.

PERFORMFRM_UPLOAD_EXCEL."將excel資料匯入到表中


*&---------------------------------------------------------------------*
*&FormSCR_F4
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_LT_FILE_TABLEtext
*----------------------------------------------------------------------*
FORMFRM_SCR_F4CHANGINGP_LT_FILE_TABLE.
CALLMETHODCL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE='FileSelected'
FILE_FILTER='MicrosoftExcel(*.XLS;*.XLSX;*.XLSM)|*.XLS;*.XLSX;*.XLSM|'"'Execel(*.xls,*.xlsx)|*.XLS*'
INITIAL_DIRECTORY='C:\'
CHANGING
FILE_TABLE=LT_FILE_TABLE
RC=LV_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED=1
CNTL_ERROR=2
ERROR_NO_GUI=3
NOT_SUPPORTED_BY_GUI=4
OTHERS=5.
IFSY-SUBRC<>0.
*Implementsuitableerrorhandlinghere
ENDIF.
READTABLELT_FILE_TABLEINTOLS_FILE_TABLEINDEX1.
IFSY-SUBRCEQ0.
GV_PATH=LS_FILE_TABLE-FILENAME.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormGET_FILEPATH
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->p1text
*<--p2text
*----------------------------------------------------------------------*
FORMFRM_CHECK_FILEPATHUSINGLV_PATH."檢查路徑是否正確
CALLMETHODCL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE=LV_PATH
RECEIVING
RESULT=LV_BOOLEAN
EXCEPTIONS
CNTL_ERROR=1
ERROR_NO_GUI=2
WRONG_PARAMETER=3
NOT_SUPPORTED_BY_GUI=4
OTHERS=5.
IFSY-SUBRC<>0OR
LV_BOOLEANISINITIAL.
MESSAGETEXT-016TYPE'S'DISPLAYLIKE'E'.
EXIT.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormIPT_EXCEL
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->p1text
*<--p2text
*----------------------------------------------------------------------*
FORMFRM_UPLOAD_EXCEL."上傳EXCEL
DATALV_PATHTYPERLGRAP-FILENAME.
MOVEGV_PATHTOLV_PATH.
FIELD-SYMBOLS:<L_VALUE>TYPEANY.

CALLFUNCTION'ALSM_EXCEL_TO_INTERNAL_TABLE'"讀取檔案內容到LT_LINES表中
EXPORTING
FILENAME=LV_PATH
I_BEGIN_COL=1
I_BEGIN_ROW=2
I_END_COL=6
I_END_ROW=999
TABLES
INTERN=LT_LINES
EXCEPTIONS
INCONSISTENT_PARAMETERS=1
UPLOAD_OLE=2
OTHERS=3.
IFSY-SUBRC<>0.
*Implementsuitableerrorhandlinghere
ENDIF.
SORTLT_LINESBYROWCOL."排序

LOOPATLT_LINESINTOLS_LINES."將EXCEL檔案內容複製到LT_UPLOAD表中
ASSIGNCOMPONENTLS_LINES-COLOFSTRUCTURELS_UPLOADTO<L_VALUE>.
<L_VALUE>=LS_LINES-VALUE.
ATENDOFROW.
APPENDLS_UPLOADTOLT_UPLOAD.
ENDAT.
ENDLOOP.

LOOPATLT_UPLOADINTOLS_UPLOAD."錯誤訊息提示等
IFLS_UPLOAD-BUKRS=''.
MESSAGE'模板格式錯誤'TYPE'E'.
ELSE.
P_BUKRS=LS_UPLOAD-BUKRS.
SELECTCOUNT(*)
FROMT001
WHEREBUKRS=P_BUKRS.
IFSY-SUBRC<>0.
MESSAGE'公司程式碼不存在'TYPE'E'.
ENDIF.
ENDIF.
MOVE-CORRESPONDINGLS_UPLOADTOLS_CHECK_UPLOAD.
APPENDLS_CHECK_UPLOADTOLT_CHECK_UPLOAD.
ENDLOOP.

PERFORMFRM_FIELDSETCHANGINGGT_FCAT."ALV顯示欄位設定
PERFORMFRM_LAYOUTSETCHANGINGGS_LAYO."ALV顯示介面設定

CALLFUNCTION'REUSE_ALV_GRID_DISPLAY_LVC'"呼叫ALV顯示函式進行顯示
EXPORTING
I_CALLBACK_PROGRAM=SY-REPID
I_CALLBACK_PF_STATUS_SET='FRM_SET_PF_STATUS'
I_CALLBACK_USER_COMMAND='FRM_USER_COMMAND'
*i_grid_settings=i_grid_settings
IS_LAYOUT_LVC=GS_LAYO
IT_FIELDCAT_LVC=GT_FCAT
I_SAVE='A'
*IT_EVENTS=GT_EVENTS
TABLES
T_OUTTAB=LT_CHECK_UPLOAD
EXCEPTIONS
PROGRAM_ERROR=1
OTHERS=2.
.
IFSY-SUBRC<>0.
*Implementsuitableerrorhandlinghere
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_FIELDSET
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_IT_FCATtext
*----------------------------------------------------------------------*
FORMFRM_FIELDSETCHANGINGGT_FCATTYPELVC_T_FCAT."ALV顯示欄位設定
DATAGS_FCATTYPELVC_S_FCAT.
DATAWLV_POSTYPEI.
DEFINEADDFCAT."巨集定義
ADD1TOWLV_POS.
GS_FCAT-COL_POS=WLV_POS.
GS_FCAT-FIELDNAME=&1.
GS_FCAT-SCRTEXT_L=&2.
GS_FCAT-SCRTEXT_M=&2.
GS_FCAT-SCRTEXT_S=&2.
GS_FCAT-COLTEXT=&2.
GS_FCAT-NO_ZERO=

'X'.GS_FCAT
-COL_OPT='X'.
APPENDGS_FCATtoGT_FCAT.
clearGS_FCAT.
END-OF-DEFINITION.ADDFCAT

'BUKRS''公司程式碼'.ADDFCAT
'ANLN1''資產號'.ADDFCAT
'GGJAHR''年度'.ADDFCAT
'AFPER''月份'.ADDFCAT
'GSTZAHL''總量'.ADDFCAT
'STZAHL''實際用量'.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_LAYOUTSET

*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_WA_LAYOtext
*----------------------------------------------------------------------*
FORMFRM_LAYOUTSETCHANGINGGS_LAYOTYPELVC_S_LAYO."ALV顯示介面設定GS_LAYO

-ZEBRA='X'.

ENDFORM.

FORMFRM_USER_COMMANDUSINGZCOMMLIKESY-UCOMM"使用者按鈕事件定義Z_SELFIELD
TYPESLIS_SELFIELD.
CASEZCOMM.
WHEN'ZLOAD'.
PERFORMFRM_DOWNLOAD_ALV."下載事件

WHENOTHERS.
ENDCASE.


ENDFORM.

FORMFRM_SET_PF_STATUSUSINGEXTABTYPESLIS_T_EXTAB.
SETPF-STATUS'STANDARD'.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_DOWNLOAD_ALV
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->p1text
*<--p2text
*----------------------------------------------------------------------*
FORMFRM_DOWNLOAD_ALV.

DATALV_ERRORTYPECHAR1.
DATA:LV_FILETYPERLGRAP-FILENAME.

PERFORMFRM_GET_FILECHANGINGGV_PATHLV_ERROR."獲取自定義的檔案路徑
CHECKLV_ERRORISINITIAL.
*PERFORMFRM_PROCESS_INDCATORUSING'程式正在下載模板'."介面友好,頁面左下角顯示提示LV_FILE
=GV_PATH.
CONCATENATELV_FILE"檔名連線
'固定資產表'SY
-UZEIT
'.xls'
INTOLV_FILE.
"下載模板
PERFORMFRM_DOWNLOAD_TEMPLATEUSINGLV_FILE"去SMW0下載空模板
CHANGINGLV_ERROR.

CHECKLV_ERRORISINITIAL.

PERFORMFRM_OPEN_EXCEL_HIDEUSINGLV_FILE'X'."開啟空模板檔案


PERFORMFRM_WRITE_DATA."把資料寫入到EXCEL

PERFORMFRM_CLOSE_EXCELUSINGLV_FILE."關閉EXCEL
PERFORMFRM_FREE_OBJECT."釋放物件



ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_GET_FILE
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*<--P_LV_PATHtext
*<--P_LV_ERRORtext
*----------------------------------------------------------------------*
FORMFRM_GET_FILECHANGINGLV_PATHLV_ERROR
.
DATA:LV_FOLDERTYPESTRING.

CALLMETHODCL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
EXPORTINGWINDOW_TITLE
='檔案路徑選擇'
*initial_folder=
CHANGINGSELECTED_FOLDER
=LV_FOLDER
EXCEPTIONSCNTL_ERROR
=1ERROR_NO_GUI
=2NOT_SUPPORTED_BY_GUI
=3
OTHERS=4.
IFSY-SUBRC<>0.
MESSAGEIDSY-MSGIDTYPE'S'NUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4DISPLAY
LIKE'E'.LV_ERROR
='X'.
ELSEIFLV_FOLDERISINITIAL.
MESSAGE'檔案下載取消!'TYPE'S'.LV_ERROR
='X'.
ELSE.LV_PATH
=LV_FOLDER.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->P_LV_FILEtext
*-->P_LV_ERRORtext
*----------------------------------------------------------------------*
FORMFRM_DOWNLOAD_TEMPLATEUSINGLV_FILETYPERLGRAP-FILENAME
CHANGINGLV_ERROR.
DATA:LO_OBJDATALIKEWWWDATATAB,LO_MIME
LIKEW3MIME,LS_OBJNAM
TYPESTRING,LI_RC
LIKESY-SUBRC,LS_ERRTXT
TYPESTRING,LV_OBJID
TYPEWWWDATA-OBJID.

*LV_OBJID='ZOLE_EXCEL'.LV_OBJID
='YYHD_OLE_TEST'.
CONCATENATELV_OBJID'.XLSX'INTOLS_OBJNAM.
CONDENSELS_OBJNAMNO-GAPS.

SELECTSINGLERELIDOBJIDFROMWWWDATA
INTOCORRESPONDINGFIELDSOFLO_OBJDATA
WHERESRTF2=0
ANDRELID='MI'
ANDOBJID=LV_OBJID.

IFSY-SUBRCNE0ORLO_OBJDATA-OBJIDEQSPACE.
MESSAGE'模板檔案不存在,請用TCODE:SMW0進行載入!'TYPE'E'.LV_ERROR
='X'.
ENDIF.

CALLFUNCTION'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY=LO_OBJDATADESTINATION
=LV_FILE
IMPORTINGRC
=LI_RC.

IFLI_RCNE0.
MESSAGE'模板檔案下載失敗!'TYPE'E'.LV_ERROR
='X'.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_OPEN_EXCEL_HIDE
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->P_LV_FILEtext
*-->P_0639text
*-->P_ENDFORMtext
*----------------------------------------------------------------------*
FORMFRM_OPEN_EXCEL_HIDEUSINGP_FILEP_HIDE
.
CREATEOBJECTAPPLICATION'EXCEL.APPLICATION'.

IFP_HIDEISNOTINITIAL.
SETPROPERTYOFAPPLICATION'VISIBLE'=0.
ELSE.
SETPROPERTYOFAPPLICATION'Visible'=1.
ENDIF.
CALLMETHODOFAPPLICATION'Workbooks'=WORKBOOK.
CALLMETHODOFWORKBOOK'Open'=WORKBOOK
EXPORTING#1
=P_FILE.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_WRITE_DATA
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->p1text
*<--p2text
*----------------------------------------------------------------------*
FORMFRM_WRITE_DATA.

DATA:BEGINOFLW_CHAR,
LINE(2200)TYPEC,
ENDOFLW_CHAR.

DATALT_CHARLIKETABLEOFLW_CHAR."將資料拷貝到剪下板上
DATA:BEGINOFLW_ALV,LINE1
(200)TYPEC,"LINE2
(200)TYPEC,"LINE3
(200)TYPEC,"LINE4
(200)TYPEC,"LINE5
(200)TYPEC,"LINE6
(200)TYPEC,"
ENDOFLW_ALV.
DATALV_RCTYPEI.
DATALV_TYPETYPEC.
FIELD-SYMBOLS<LV_FIELD>.


DESCRIBEFIELDLW_ALVTYPELV_TYPECOMPONENTSLV_RC.

LOOPATLT_CHECK_UPLOADINTOLS_CHECK_UPLOAD.LW_ALV
-LINE1=LS_CHECK_UPLOAD-BUKRS."LW_ALV
-LINE2=LS_CHECK_UPLOAD-ANLN1."LW_ALV
-LINE3=LS_CHECK_UPLOAD-GGJAHR."LW_ALV
-LINE4=LS_CHECK_UPLOAD-AFPER."LW_ALV
-LINE5=LS_CHECK_UPLOAD-GSTZAHL."LW_ALV
-LINE6=LS_CHECK_UPLOAD-STZAHL."
CLEARLW_CHAR-LINE.
DOLV_RCTIMES.
ASSIGNCOMPONENTSY-INDEXOFSTRUCTURELW_ALVTO<LV_FIELD>.
CONCATENATELW_CHAR-LINE<LV_FIELD>CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TABINTOLW_CHAR-LINE.
ENDDO.
APPENDLW_CHARTOLT_CHAR.
ENDLOOP.
*將內表資料放到excel剪下板上
CALLMETHODCL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
IMPORTING
DATA=LT_CHAR"Data
CHANGINGRC
=LV_RC"ReturnCode
EXCEPTIONSCNTL_ERROR
=1ERROR_NO_GUI
=2NOT_SUPPORTED_BY_GUI
=3
*no_authority=4
OTHERS=5.


GETPROPERTYOFAPPLICATION'ACTIVECELL'=SHEET.
*
CALLMETHODOFAPPLICATION'Worksheets'=SHEET
EXPORTING#1
='Sheet1'.
**
CALLMETHODOFSHEET'Activate'.
*SelectthecellA1
CALLMETHODOFAPPLICATION'CELLS'=CELL
EXPORTING#1
=2"i_row#2
=1."i_col

*Pasteclipboardfromcell
CALLMETHODOFCELL'SELECT'."選擇單元格
CALLMETHODOFSHEET'Paste'."貼上
CALLMETHODOFAPPLICATION'CELLS'=CELL
EXPORTING#1
=2#2
=1.
CALLMETHODOFCELL'SELECT'."取消全選

ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_CLOSE_EXCEL
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->P_LV_FILEtext
*----------------------------------------------------------------------*
FORMFRM_CLOSE_EXCELUSINGP_FILE.
GETPROPERTYOFAPPLICATION'ActiveWorkbook'=WORKBOOK.
CALLMETHODOFWORKBOOK'SAVE'.
CALLMETHODOFWORKBOOK'ClOSE'.
*EXPORTING
*#1=1.
CALLMETHODOFWORKBOOK'QUIT'.


ENDFORM.
*&---------------------------------------------------------------------*
*&FormFRM_FREE_OBJECT
*&---------------------------------------------------------------------*
*text
*----------------------------------------------------------------------*
*-->p1text
*<--p2text
*----------------------------------------------------------------------*
FORMFRM_FREE_OBJECT.
FREEOBJECTFONT.
FREEOBJECTRANGE.
FREEOBJECTRANGE1.
FREEOBJECTCOLUMNS.
FREEOBJECTROWS.
FREEOBJECTCELL.
FREEOBJECTCELL1.
FREEOBJECTSHEET1.
FREEOBJECTSHEET.
FREEOBJECTWORKBOOK.
FREEOBJECTAPPLICATION.
ENDFORM.