文本文件或Excel文件导入与导出

TEXT_CONVERT_XLS_TO_SAP
TEXT_CONVERT_XLS_TO_SAP函数可以将本地的文本文件(列与列之间默认使用TAB键分开,但也可以指定)或真正的Excel文件上传到服务内表中,并且文件转换成内表中的数据是自动完成,不需要手动,这与ALSM_EXCEL_TO_INTERNAL_TABLE函数是不一样的

PARAMETERS:p_file LIKE rlgrap-filename OBLIGATORY.
TYPE-POOLS: truxs.
DATA: BEGIN OF i_data OCCURS 0,
        c(2),
        n(2) TYPE n,
        i TYPE i,
        d TYPE d,
      END OF i_data.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "弹出选择文件对话框
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*     DEF_FILENAME     = ' '
      def_path         = 'C:\'
          "Structure of MASK: ,<text>,<FILTERGROUP>.
          "Structure of FILTERGROUP: <filter>;<filter>*
      mask             = ',Excel File,*.xls;*.xlsx;*.txt.'
      title            = 'Window Title:请选择文件'
          "弹出框的模式 S -- 用来保存文件 O -- 用来打开文件
      MODE             = 'S'
    IMPORTING
      filename         = p_file
*     RC               =
    EXCEPTIONS
      INV_WINSYS       = 1
      NO_BATCH         = 2
      SELECTION_CANCEL = 3"如果用户取消了对话框
      SELECTION_ERROR  = 4
      OTHERS           = 5.

START-OF-SELECTION.
  DATA: il_raw TYPE truxs_t_text_data.
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
*     i_line_header        = 'X' "文本中的第一行是否是标题头,如果是则不会读取
      i_tab_raw_data       = il_raw "该参数实际上没有使用到,但为必输参数
      i_filename           = p_file
    TABLES
      i_tab_converted_data = i_data.
  BREAK-POINT.

ALSM_EXCEL_TO_INTERNAL_TABLE
在这里插入图片描述
通过ALSM_EXCEL_TO_INTERNAL_TABLE函数可以将上面Excel中的数据导入到下面结构的内表中:
在这里插入图片描述
最后我们还需要手动将上面一个个单元格转换为成一行行,转换后如下:
在这里插入图片描述

DATA: filetab TYPE filetable WITH HEADER LINE .
DATA: rc TYPE i.
DATA: outtab TYPE TABLE OF mara WITH HEADER LINE  .
DATA: itab TYPE TABLE OF alsmex_tabline WITH HEADER LINE.
DATA:g_file TYPE rlgrap-filename.
FIELD-SYMBOLS: <fs>.
PARAMETERS: p_file TYPE string.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  "打开文件选择对话框
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      default_filename = p_file
    CHANGING
      rc               = rc
      file_table       = filetab[].
  READ TABLE  filetab INDEX  1.
  IF sy-subrc EQ 0.
    p_file = filetab-filename.
  ENDIF.


START-OF-SELECTION.
  g_file = p_file.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename    = g_file
      i_begin_col = 1     "列
      i_begin_row = 1    "行
      i_end_col   = 255
      i_end_row   = 65536
    TABLES
      intern      = itab[].
*  DELETE itab WHERE row = 1.  "删除字段名行
  LOOP AT itab.
    ON CHANGE OF itab-row.
      IF sy-tabix <> 1.
        APPEND outtab.
        CLEAR outtab.
      ENDIF.
    ENDON.
    "将列转换为内表行的形式
    ASSIGN COMPONENT itab-col OF STRUCTURE outtab TO <fs>.
    <fs> = itab-value.
  ENDLOOP.
  APPEND outtab."最后一条APPEND到内表中

SAP_CONVERT_TO_XLS_FORMAT
ABAP 内表导出到excel

CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'

            EXPORTING

                 i_filename        = file1

            TABLES

                  i_tab_sap_data    = itable1

            EXCEPTIONS

                  conversion_failed = 1.

以上代码是将内表itable1写到一个EXCEL文件file1中。如果EXCEL文件已经存在,那么将被覆盖。

结果显示,内表的内容是写到了EXCEL文件中,但如果原来的EXCEL文件行记录(假如M行)多于内表的行(假如N行),那末只覆盖一部分(M行中的前N行)。

原文出自 江正军 技术博客,博客链接:www.cnblogs.com/jiangzhengjun

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值