通过 OLE 上传资料
生活随笔
收集整理的這篇文章主要介紹了
通过 OLE 上传资料
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
通過?ALSM_EXCEL_TO_INTERNAL_TABLE 上傳Excle中資料有個限制就是單個字段的大小最大為50個字符。?
所以對于有些備注類的就不行了, 用下面的方式, 就沒這個限制了。
*&---------------------------------------------------------------------*
*&?Report??Z_AF_088
*&
*&---------------------------------------------------------------------*
REPORT??z_af_088
????????LINE-COUNT?10
????????LINE-SIZE??1000.
INCLUDE?ole2incl.
*定義OLE變量
DATA:excel?TYPE?ole2_object,
?????sheet?TYPE?ole2_object,
?????cell?TYPE?ole2_object,
?????workbook?TYPE?ole2_object.
DATA:?BEGIN?OF?itab?OCCURS?0,
??a(224),
??b(224),
??c(224),
??d(224),
END?OF?itab.
DATA:val1(224)?TYPE?c.
DATA:?r1?TYPE?i,
??????r2?TYPE?i.
DATA:?cnt?TYPE?i.
*輸入文件名參數(shù)
PARAMETERS:fn1?LIKE?rlgrap-filename?MEMORY?ID?m01.
START-OF-SELECTION.
??PERFORM?upload_from_pc?USING?fn1.
??DESCRIBE?TABLE?itab?LINES?cnt.
??WRITE:?cnt.
??LOOP?AT?itab.
????WRITE:?/?itab-a.
????WRITE:???itab-b.
????WRITE:???itab-c.
????WRITE:???itab-d.
??ENDLOOP.
*&---------------------------------------------------------------------*
*&??????Form??UPLOAD_FROM_PC
*&---------------------------------------------------------------------*
FORM?upload_from_pc??USING????p_path.
??FIELD-SYMBOLS?:?.
??DATA:?vf_index?TYPE?i.
??data:?cnt?type?i.
*啟動excel
??CREATE?OBJECT?excel?'EXCEL.APPLICATION'.?????"創(chuàng)建excel對象
??CALL?METHOD?OF?excel?'WORKBOOKS'?=?workbook.?"調(diào)用excel的方法
??IF?sy-subrc?NE?0?.
????WRITE?:?/?'EXCEL?錯誤!'.
????LEAVE?PROGRAM.
??ENDIF.
??SET?PROPERTY?OF?excel?'VISIBLE'?=?0.?????????"設置讀取Excel時,?是否可視
*EXCEL?文件打開
??CALL?METHOD?OF
??????workbook
??????'OPEN'
????EXPORTING
??????#1???????=?p_path.
??IF?sy-subrc?NE?0?.
????WRITE?:?/?'處理錯誤!'.
????LEAVE?PROGRAM.
??ENDIF.
*第一頁
??CALL?METHOD?OF
??????excel
??????'WORKSHEETS'?=?sheet
????EXPORTING
??????#1???????????=?1.
*讀取前10行4列
??DO?10?TIMES.
????r1?=?sy-index.
????DO?4?TIMES.
??????r2?=?sy-index.
??????MOVE?sy-index?TO?vf_index.
??????ASSIGN?COMPONENT?vf_index?OF?STRUCTURE?itab?TO?.
??????CALL?METHOD?OF?????"指定單元格,并讀取值屬性
??????????excel
??????????'CELLS'?=?cell
????????EXPORTING
??????????#1??????=?r1
??????????#2??????=?r2.
??????GET?PROPERTY?OF?cell?'VALUE'?=?val1.???"讀取excel文件中的內(nèi)容是用get?property?of?excel
??????CONDENSE?val1.
??????IF?val1?EQ?space.
????????cnt?=?cnt?+?1.
??????ENDIF.
??????MOVE?val1?TO?.
??????IF?r2?EQ?4.
????????IF?cnt?<>?4.
??????????APPEND?itab.
??????????CLEAR?itab.
????????ENDIF.
????????CLEAR?cnt.
??????ENDIF.
????ENDDO.
??ENDDO.
****關閉WORKBOOK
??CALL?METHOD?OF
??????workbook
??????'CLOSE'.
****釋放對象****
??FREE?OBJECT?cell.
??FREE?OBJECT?workbook.
ENDFORM.????????????????????"?UPLOAD_FROM_PC
*&?Report??Z_AF_088
*&
*&---------------------------------------------------------------------*
REPORT??z_af_088
????????LINE-COUNT?10
????????LINE-SIZE??1000.
INCLUDE?ole2incl.
*定義OLE變量
DATA:excel?TYPE?ole2_object,
?????sheet?TYPE?ole2_object,
?????cell?TYPE?ole2_object,
?????workbook?TYPE?ole2_object.
DATA:?BEGIN?OF?itab?OCCURS?0,
??a(224),
??b(224),
??c(224),
??d(224),
END?OF?itab.
DATA:val1(224)?TYPE?c.
DATA:?r1?TYPE?i,
??????r2?TYPE?i.
DATA:?cnt?TYPE?i.
*輸入文件名參數(shù)
PARAMETERS:fn1?LIKE?rlgrap-filename?MEMORY?ID?m01.
START-OF-SELECTION.
??PERFORM?upload_from_pc?USING?fn1.
??DESCRIBE?TABLE?itab?LINES?cnt.
??WRITE:?cnt.
??LOOP?AT?itab.
????WRITE:?/?itab-a.
????WRITE:???itab-b.
????WRITE:???itab-c.
????WRITE:???itab-d.
??ENDLOOP.
*&---------------------------------------------------------------------*
*&??????Form??UPLOAD_FROM_PC
*&---------------------------------------------------------------------*
FORM?upload_from_pc??USING????p_path.
??FIELD-SYMBOLS?:?.
??DATA:?vf_index?TYPE?i.
??data:?cnt?type?i.
*啟動excel
??CREATE?OBJECT?excel?'EXCEL.APPLICATION'.?????"創(chuàng)建excel對象
??CALL?METHOD?OF?excel?'WORKBOOKS'?=?workbook.?"調(diào)用excel的方法
??IF?sy-subrc?NE?0?.
????WRITE?:?/?'EXCEL?錯誤!'.
????LEAVE?PROGRAM.
??ENDIF.
??SET?PROPERTY?OF?excel?'VISIBLE'?=?0.?????????"設置讀取Excel時,?是否可視
*EXCEL?文件打開
??CALL?METHOD?OF
??????workbook
??????'OPEN'
????EXPORTING
??????#1???????=?p_path.
??IF?sy-subrc?NE?0?.
????WRITE?:?/?'處理錯誤!'.
????LEAVE?PROGRAM.
??ENDIF.
*第一頁
??CALL?METHOD?OF
??????excel
??????'WORKSHEETS'?=?sheet
????EXPORTING
??????#1???????????=?1.
*讀取前10行4列
??DO?10?TIMES.
????r1?=?sy-index.
????DO?4?TIMES.
??????r2?=?sy-index.
??????MOVE?sy-index?TO?vf_index.
??????ASSIGN?COMPONENT?vf_index?OF?STRUCTURE?itab?TO?.
??????CALL?METHOD?OF?????"指定單元格,并讀取值屬性
??????????excel
??????????'CELLS'?=?cell
????????EXPORTING
??????????#1??????=?r1
??????????#2??????=?r2.
??????GET?PROPERTY?OF?cell?'VALUE'?=?val1.???"讀取excel文件中的內(nèi)容是用get?property?of?excel
??????CONDENSE?val1.
??????IF?val1?EQ?space.
????????cnt?=?cnt?+?1.
??????ENDIF.
??????MOVE?val1?TO?.
??????IF?r2?EQ?4.
????????IF?cnt?<>?4.
??????????APPEND?itab.
??????????CLEAR?itab.
????????ENDIF.
????????CLEAR?cnt.
??????ENDIF.
????ENDDO.
??ENDDO.
****關閉WORKBOOK
??CALL?METHOD?OF
??????workbook
??????'CLOSE'.
****釋放對象****
??FREE?OBJECT?cell.
??FREE?OBJECT?workbook.
ENDFORM.????????????????????"?UPLOAD_FROM_PC
總結(jié)
以上是生活随笔為你收集整理的通过 OLE 上传资料的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。