ABAP 程序完成EXCEL文件的导入导出

(一)常用的OLE函数:

CALL METHOD , CALL OBJECT ,   FREE OBJECT , GET PROPERTY   , SET   PROPERTY.

设属性:SET PROPERTY OF <对象><属性> = <value>

取属性:GET PROPERTY OF <对象><属性> = 变量

调用方法:CALL METHOD OF <对象><METHOD><value>     EXPORTING #<PARA> = <VALUE>.

输出可以是多个参数。

释放对象是:FREE OBJECT<对象>.

(二)从excel读入文件到abap程序

a: 使用函数将excel读入abap内表

先要定义读入excel 的内表,abap本身已定义格式

然后要有一个输入文件名参数,改参数输入要读取的excel文件的所在路径

再调用函数直接从已知文件名读入内表

最后测试可以循环读取内表并打印显示出来

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style. italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; }REPORT   YTEST67.
DATA:BEGIN OF IEXCEL OCCURS 0.
     INCLUDE STRUCTURE ALSMEX_TABLINE.
DATA:END OF IEXCEL.

PARAMETERS:FN1 LIKE RLGRAP-FILENAME MEMORY ID M01.

"CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  EXPORTING
     filename                       = FN1
     i_begin_col                    = 1
     i_begin_row                    = 1
     i_end_col                      = 100
     i_end_row                      = 100
  tables
     intern                         = IEXCEL
EXCEPTIONS
    INCONSISTENT_PARAMETERS        = 1
    UPLOAD_OLE                     = 2
   OTHERS                         = 3
           .
IF sy-subrc <> 0.
  WRITE: / '读入文件错误!',FN1.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
  LOOP AT IEXCEL.
    WRITE IEXCEL-VALUE(20).
    AT END OF ROW.
      WRITE : /.
    ENDAT.
  ENDLOOP.
ENDIF.

b:直接从excel读取

先要定义OLE变量,要有输入文件名参数(同上)

再启动excel 即要创建excel对象

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style. italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; }REPORT   YTEST68.

INCLUDE OLE2INCL.
*定义OLE变量
DATA:EXCEL TYPE OLE2_OBJECT,
      SHEET TYPE OLE2_OBJECT,
      CELL TYPE OLE2_OBJECT,
      WORKBOOK TYPE OLE2_OBJECT.

DATA:VAL1(30TYPE C.
DATA: R1 TYPE I,
       R2 TYPE I.
*输入文件名参数
PARAMETERS:FN1 LIKE RLGRAP-FILENAME MEMORY ID M01.

*启动excel
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'."创建excel对象
*
CALL METHOD OF EXCEL 'WORKBOOKS' = WORKBOOK. "调用excel的方法
IF SY-SUBRC NE 0 .
  WRITE : / 'EXCEL 错误!'.
  LEAVE PROGRAM.
ENDIF.
*使excel 可视
SET PROPERTY OF EXCEL 'VISIBLE' = 1.
*EXCEL 文件打开
CALL METHOD OF WORKBOOK 'OPEN'  EXPORTING   #1 = FN1.

IF SY-SUBRC NE 0 .
  WRITE : / '处理错误!'.
  LEAVE PROGRAM.
ENDIF.
*第一页
CALL METHOD OF EXCEL  'WORKSHEETS' = SHEET  EXPORTING   #1 = 1.
*读取前10行10列
DO 10 TIMES.
  WRITE : / '行:',SY-INDEX.
   R1 = SY-INDEX.
  DO 10 TIMES.
     R2 = SY-INDEX.
*指定单元格,并读取值属性
    CALL METHOD OF EXCEL 'CELLS' = CELL  EXPORTING #1 = R1   #2 = R2.
    GET PROPERTY OF CELL 'VALUE' = VAL1.          "读取excel文件中的内容是用get property of excel
                                                  "如果是写入excel文件则用 set property of excel
    WRITE : VAL1.
  ENDDO.
ENDDO.

(三)将数据传送到excel并保存

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style. italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; }REPORT   YTEST69.

INCLUDE OLE2INCL.
*定义OLE变量
DATA:EXCEL TYPE OLE2_OBJECT,
      SHEET TYPE OLE2_OBJECT,
      CELL TYPE OLE2_OBJECT,
      WORKBOOK TYPE OLE2_OBJECT.

DATA:VAL1(30TYPE C.
DATA: R1 TYPE I,
       R2 TYPE I.
*输入文件名参数
PARAMETERS:FN1 LIKE RLGRAP-FILENAME MEMORY ID M01.

*启动excel
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.

IF SY-SUBRC NE 0 .
  WRITE: / ''.
  STOP.
ENDIF.

CALL METHOD OF EXCEL 'WORKBOOKS' = WORKBOOK.
*使excel 可视
SET PROPERTY OF EXCEL 'VISIBLE' = 1.

*建立worksheet
SET PROPERTY OF EXCEL 'SHEETSINNEWWORKBOOK' = 1.          "如果是读取excel文件中的内容 则是直接打开工作簿第一页
CALL METHOD OF WORKBOOK 'ADD'.                             " 例如:CALL METHOD OF EXCEL 'WORKSHEETS'   = SHEET   EXPORTING #1 = 1.
*写前10行10列
DO 10 TIMES.
   R1 = SY-INDEX.
   VAL1+1(4) = '行:'.
   VAL1+6(4) =   R1.
  DO 10 TIMES.
     R2 = SY-INDEX.
     VAL1+15(4) = '列:'.
     VAL1+19(4) = R2.
*指定单元格,并写入值
   CALL METHOD OF EXCEL 'CELLS' = CELL  EXPORTING #1 = R1   #2 = R2.
   SET PROPERTY OF CELL 'VALUE' = VAL1.
  ENDDO.
ENDDO.


*存入文件
GET PROPERTY OF EXCEL 'ACTIVESHEET' = SHEET.      "激活工作簿
GET PROPERTY OF EXCEL 'ACTIVEWORKBOOK' = WORKBOOK.   "激活工作区
CALL METHOD OF WORKBOOK 'SAVEAS' EXPORTING #1 = FN1   #2 = 1.    "将excel文件保存为 FN1   路径
CALL METHOD OF WORKBOOK 'CLOSE'.           "关闭工作区
CALL METHOD OF EXCEL 'QUIT'.               " 退出excel
WRITE 'DONE'.                              "退出成功,输出done

FREE OBJECT SHEET.                      "释放操作
FREE OBJECT WORKBOOK.
FREE OBJECT EXCEL.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP可以使用函数模块GUI_DOWNLOAD和ALSM_EXCEL_TO_INTERNAL_TABLE来动态导出Excel表。 首先,使用ALSM_EXCEL_TO_INTERNAL_TABLE函数将数据导入到内部表中。以下是一个简单的例子: ``` DATA: it_data TYPE STANDARD TABLE OF mara, wa_data TYPE mara. SELECT * FROM mara INTO TABLE it_data. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = 'example.xlsx' i_begin_col = 'A' i_begin_row = 1 i_end_col = 'D' i_end_row = 1000 TABLES intern = it_data EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 others = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ``` 然后,使用函数模块GUI_DOWNLOAD将内部表中的数据导出Excel文件中。以下是一个简单的例子: ``` DATA: it_data TYPE STANDARD TABLE OF mara, wa_data TYPE mara. SELECT * FROM mara INTO TABLE it_data. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = 'example.xlsx' i_begin_col = 'A' i_begin_row = 1 i_end_col = 'D' i_end_row = 1000 TABLES intern = it_data EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 others = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = 'example.xlsx' filetype = 'ASC' write_field_separator = ' ' TABLES data_tab = it_data EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 others = 22. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ``` 在这些例子中,使用了内部表mara来存储数据,将数据导入Excel文件中。你可以根据需要更改内部表和字段名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值