ABAP - 数据导入导出程序

博客介绍了两种EXCEL导入方式,方式一读取数据直接在内表 IT_SPFLI 内,样式和EXCEL一样;方式二读取数据在内表 IT_ lt_ALS 内,需处理转换。还提到 text 文本导入,可在 LOOP 循环中一次导出多个EXCEL,最后介绍了 EXCEL 导出程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EXCEL 导入方式一

说明: 读取的数据直接在内表 IT_SPFLI 内,样式和EXCEL一样

DATA :  P_PATH TYPE STRING.
DATA: IT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE,
      MUL_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.

DATA: L_RC TYPE I,
      L_FILE_TABLE TYPE FILETABLE ,
      WA_FILE TYPE LINE OF  FILETABLE.
type-POOLS:TRUXS.
DATA LT_RAW type TRUXS_T_TEXT_DATA .

START-OF-SELECTION.
*--------------------------------------------------------------------* 获取文件路径
call METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
  DEFAULT_EXTENSION = '文本文件 (*.txt)|*.txt|全部文件 (*.*)|*.*|'
  DEFAULT_FILENAME = P_PATH
CHANGING
  FILE_TABLE = L_FILE_TABLE
  rc   = L_RC.

LOOP AT L_FILE_TABLE INTO WA_FILE.
L_PATH = WA_FILE-FILENAME.
ENDLOOP.

读取数据
data:L_file like RLGRAP-FILENAME.
l_file = l_path.

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
  EXPORTING
   I_FIELD_SEPERATOR          = 'X'                   "有没有表头,X 表示有
   I_LINE_HEADER              = 'X'
    I_TAB_RAW_DATA             = LT_RAW
    I_FILENAME                 = L_file
  TABLES
    I_TAB_CONVERTED_DATA       = IT_SPFLI
* EXCEPTIONS
*   CONVERSION_FAILED          = 1
*   OTHERS                     = 2
          .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

EXCEL 导入方式二

说明: 读取的数据在内表 IT_ lt_ALS 内, 数据需要处理转换成需要的样式,内表IT_ lt_ALS 分为行EXCEL 的行、EXCEl的列 和数据列三个列

DATA: lt_als LIKE TABLE OF alsmex_tabline WITH HEADER LINE.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name = 'LV_FILE'
    IMPORTING
      file_name  = lv_file.

  CHECK lv_file IS NOT INITIAL.
*  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
*    EXPORTING
*      i_line_header        = 'X'      "标识导入的表有标题行,去掉首行
*      i_tab_raw_data       = lt_raw   " WORK TABLE
*      i_filename           = lv_file "文件路径
*    TABLES
*      i_tab_converted_data = lt_xls[] "ACTUAL DATA 接收数据的内表
*    EXCEPTIONS
*      conversion_failed    = 1
*      OTHERS               = 2.


  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename    = lv_file
      i_begin_col = 1
      i_begin_row = 2
      i_end_col   = 12
      i_end_row   = 9999
    TABLES
      intern      = lt_als.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF lt_als[] IS INITIAL.
      MESSAGE e019.
    ELSE.
      CLEAR: i_zepldtl, i_zepldtl[].
      LOOP AT lt_als.
        lv_idx = lt_als-col.
        ASSIGN COMPONENT lv_idx OF STRUCTURE lt_xls TO <fs1>.
        <fs1> = lt_als-value.
        AT END OF row.
          APPEND lt_xls.
          CLEAR lt_xls.
        ENDAT.
      ENDLOOP.

      LOOP AT lt_xls.
        lv_posnr = sy-tabix.
        CLEAR i_zepldtl.
        MOVE-CORRESPONDING lt_xls TO i_zepldtl.
        PERFORM frm_add_zero_yb CHANGING i_zepldtl-matnr.
        i_zepldtl-posnr = lv_posnr.
        APPEND i_zepldtl.
      ENDLOOP.
      CALL SCREEN 9001.
    ENDIF.
  ENDIF.

text 文本导入

说明: 本列是LOOP循环中一次导出多个EXCEL,如果不需要,去掉LOOP循环

DATA : L_PATH TYPE STRING,
      N_1 TYPE N,
      P_PATH TYPE STRING.

DATA: IT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE,
      MUL_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.

DATA: L_RC TYPE I,
      L_FILE_TABLE TYPE FILETABLE ,
      WA_FILE TYPE LINE OF  FILETABLE.
type-POOLS:TRUXS.
DATA LT_RAW type TRUXS_T_TEXT_DATA .

call METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
  DEFAULT_EXTENSION = '文本文件 (*.txt)|*.txt|全部文件 (*.*)|*.*|'
  DEFAULT_FILENAME = P_PATH
CHANGING
  FILE_TABLE = L_FILE_TABLE
  rc   = L_RC.

LOOP AT L_FILE_TABLE INTO WA_FILE.
L_PATH = WA_FILE-FILENAME.
ENDLOOP.

2.	数据传输到内表
find '.txt' in L_PATH.
*--------------------------------------------------------------------* 获取 TEXt 上载文件
IF sy-subrc = 0.
CAiaoLL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    FILENAME                      = L_PATH
*   FILETYPE                      = 'ASC'
   HAS_FIELD_SEPARATOR           = 'X'
*   HEADER_LENGTH                 = 0
*   READ_BY_LINE                  = 'X'
*   DAT_MODE                      = ' '
*   CODEPAGE                      = ' '
*   IGNORE_CERR                   = ABAP_TRUE
*   REPLACEMENT                   = '#'
*   CHECK_BOM                     = ' '
*   VIRUS_SCAN_PROFILE            =
*   NO_AUTH_CHECK                 = ' '
*   ISDOWNLOAD                    = ' '
* IMPORTING
*   FILELENGTH                    =
*   HEADER                        =
  TABLES
    DATA_TAB                      = IT_SPFLI
* CHANGING
*   ISSCANPERFORMED               = ' '
* EXCEPTIONS
*   FILE_OPEN_ERROR               = 1
*   FILE_READ_ERROR               = 2
*   NO_BATCH                      = 3
*   GUI_REFUSE_FILETRANSFER       = 4
*   INVALID_TYPE                  = 5
*   NO_AUTHORITY                  = 6
*   UNKNOWN_ERROR                 = 7
*   BAD_DATA_FORMAT               = 8
*   HEADER_NOT_ALLOWED            = 9
*   SEPARATOR_NOT_ALLOWED         = 10
*   HEADER_TOO_LONG               = 11
*   UNKNOWN_DP_ERROR              = 12
*   ACCESS_DENIED                 = 13
*   DP_OUT_OF_MEMORY              = 14
*   DISK_FULL                     = 15
*   DP_TIMEOUT                    = 16
*   OTHERS                        = 17

EXCEL 导出程序

1.	获取保存路径 (也可以使用类中方法:FILE_SAVE_DIALOG)
DATA : L_PATH TYPE STRING.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
CHANGING
  SELECTED_FOLDER = L_PATH.

*--------------------------------------------------------------------* EXCEL 文件下载
N_1 = 0.
LOOP AT IT_SPFLI .
  MUL_SPFLI = IT_SPFLI.
   APPEND MUL_SPFLI.

N_1 = N_1 + 1.

CONCATENATE L_PATH  '\'  SY-DATUM  '-' N_1  '.XLS' INTO P_PATH.

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
*   BIN_FILESIZE                    =
    FILENAME                        = L_PATH
    FILETYPE                        = 'DAT'
*   APPEND                          = ' '
   WRITE_FIELD_SEPARATOR           = 'X'
*   HEADER                          = '00'
   TRUNC_TRAILING_BLANKS           = 'X'
*   WRITE_LF                        = 'X'
*   COL_SELECT                      = ' '
*   COL_SELECT_MASK                 = ' '
*   DAT_MODE                        = ' '
*   CONFIRM_OVERWRITE               = ' '
*   NO_AUTH_CHECK                   = ' '
*   CODEPAGE                        = ' '
*   IGNORE_CERR                     = ABAP_TRUE
*   REPLACEMENT                     = '#'
*   WRITE_BOM                       = ' '
*   TRUNC_TRAILING_BLANKS_EOL       = 'X'
*   WK1_N_FORMAT                    = ' '
*   WK1_N_SIZE                      = ' '
*   WK1_T_FORMAT                    = ' '
*   WK1_T_SIZE                      = ' '
*   WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*   SHOW_TRANSFER_STATUS            = ABAP_TRUE
*   VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'
* IMPORTING
*   FILELENGTH                      =
  TABLES
    DATA_TAB                        = MUL_SPFLI[]
*   FIELDNAMES                      =
* 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
          .

ENDLOOP.
IF SY-SUBRC <> 0.
  MESSAGE S999(sa) with 'ok'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值