需求:将alv上面的数据计算到内表中区,然后通过自定义按钮进行下载到csv格式中

附加:现在基本不用csv导出了,但是有些变态需求强行要求,也只好研究出来了,excel与txt导出很简单,那就不多说了。
 
步骤:
1.copy系统标准的SAP_CONVERT_TO_CSV_FORMAT函数,此函数已经使用不了,命名为ZSAP_CONVERT_TO_CSV_FORMAT,然后进行修改几处;
a.系统标准的TRUXS_T_TEXT_DATA不存在,对于本机gui来说
ZCSV_T为自己修改的类型,用于接收后面函数table里面的值,记得用char4096.
 
FUNCTION ZSAP_CONVERT_TO_CSV_FORMAT.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_FIELD_SEPERATOR) TYPE  CHAR01 DEFAULT ';'
*"     VALUE(I_LINE_HEADER) TYPE  CHAR01 OPTIONAL
*"     VALUE(I_FILENAME) LIKE  RLGRAP-FILENAME OPTIONAL
*"     VALUE(I_APPL_KEEP) TYPE  CHAR01 DEFAULT SPACE
*"  TABLES
*"      I_TAB_SAP_DATA TYPE  STANDARD TABLE
*"  CHANGING
*"     VALUE(I_TAB_CONVERTED_DATA) TYPE  ZCSV_T OPTIONAL
*"  EXCEPTIONS
*"      CONVERSION_FAILED
*"----------------------------------------------------------------------
  CONSTANTS: C_FIELD_SEPARATOR VALUE ','.

DATA:
        L_START_STRING LIKE SY-FDPOS,
        L_END_STRING LIKE SY-FDPOS,
        L_LEN_STRING(6) TYPE N,
        L_EOL_STRING LIKE SY-FDPOS,
        L_START_TARGET_STRING LIKE SY-FDPOS,
        L_END_TARGET_STRING LIKE SY-FDPOS,
        L_LEN_TARGET_STRING(6) TYPE N,
        L_EOL_TARGET_STRING LIKE SY-FDPOS,
        L_CONV_DATA TYPE LINE OF ZCSV_T,
        L_CSV_DATA TYPE LINE OF ZCSV_T.

CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
    EXPORTING
      I_FIELD_SEPERATOR    = C_FIELD_SEPARATOR
      I_LINE_HEADER        = I_LINE_HEADER
      I_FILENAME           = I_FILENAME
    TABLES
      I_TAB_SAP_DATA       = I_TAB_SAP_DATA
    CHANGING
      I_TAB_CONVERTED_DATA = I_TAB_CONVERTED_DATA
    EXCEPTIONS
      CONVERSION_FAILED    = 4.

CHECK SY-SUBRC <> 0.
*  if sy-subrc <> c_rc0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
          RAISING CONVERSION_FAILED.
*  endif.

DESCRIBE FIELD L_CSV_DATA LENGTH L_LEN_TARGET_STRING
                                     in character mode.
  DESCRIBE FIELD L_CONV_DATA LENGTH L_EOL_STRING
                                     in character mode.
  LOOP AT I_TAB_CONVERTED_DATA INTO L_CONV_DATA.
    L_START_STRING = 1.
    CLEAR: L_CSV_DATA,
           L_START_TARGET_STRING,
           L_END_TARGET_STRING.
    DO.
      SEARCH L_CONV_DATA FOR C_FIELD_SEPARATOR STARTING AT
                                                  L_START_STRING
                                                  ENDING AT
                                                  L_EOL_STRING.
      IF SY-SUBRC <> 0.
        EXIT.
      ENDIF.
      IF SY-SUBRC = 0.
        L_END_STRING = L_START_STRING + SY-FDPOS.
        L_LEN_STRING = L_END_STRING - L_START_STRING + 1.
        L_START_STRING = L_START_STRING - 1.
        L_END_TARGET_STRING = L_END_TARGET_STRING + L_LEN_STRING + 4.
        IF L_END_TARGET_STRING < L_LEN_TARGET_STRING.
          L_CSV_DATA+L_START_TARGET_STRING(3) = '"""'.
          L_START_TARGET_STRING = L_START_TARGET_STRING + 3.
          L_CSV_DATA+L_START_TARGET_STRING(L_LEN_STRING) =
                                      L_CONV_DATA+L_START_STRING.
          L_START_TARGET_STRING = L_START_TARGET_STRING + L_LEN_STRING
                                                        - 1.
          L_CSV_DATA+L_START_TARGET_STRING(1) = '"'.
          L_START_TARGET_STRING = L_START_TARGET_STRING + 1.
          L_CSV_DATA+L_START_TARGET_STRING(1) = ';'.
          L_END_TARGET_STRING = STRLEN( L_CSV_DATA ).
          L_START_TARGET_STRING = L_END_TARGET_STRING.
          L_START_STRING = L_END_STRING + 1.
        ELSE.
          EXIT.
        ENDIF.
      ENDIF.
    ENDDO.
    MODIFY I_TAB_CONVERTED_DATA FROM L_CSV_DATA.
  ENDLOOP.
ENDFUNCTION.

 
2.下面为调用类的方法,为弹出框选择路径、将内表数据通过copy的函数用逗号分隔封装到另一内表中和下载csv文件。
CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_extension    = 'CSV'
      default_file_name    = '*'
      file_filter          = 'CSV文件(*.CSV)'
    CHANGING
      filename             = w_filename
      path                 = w_file_path
      fullpath             = w_full_path
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR it_tabout.
  CALL FUNCTION 'ZSAP_CONVERT_TO_CSV_FORMAT'
*  EXPORTING
*    I_FIELD_SEPERATOR    = ';'
*   I_LINE_HEADER        =
*   I_FILENAME           =
*   I_APPL_KEEP          = ' '
    TABLES
      i_tab_sap_data       = lt_worldship
    CHANGING
      i_tab_converted_data = it_tabout
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc = 0.
  ENDIF.

CALL METHOD cl_gui_frontend_services=>gui_download
              EXPORTING
*                 bin_filesize            =
                filename                = w_filename
**                filetype                = 'DAT'
*                 codepage                = '8404'
*                 ignore_cerr             = ABAP_TRUE
*                 replacement             = '#'
              CHANGING
                data_tab                = it_tabout
              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
                not_supported_by_gui    = 22
                error_no_gui            = 23
                OTHERS                  = 24.

IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ABAP->内表数据下载到CSV格式(原创转载请注明)的更多相关文章

  1. ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...

  2. ABAP 内表数据 与 Json串 相互转换

    内表: A B C IMINGZHA  HAIMINGZ AIMINGZH 1 2 3 4 5 6 Json串:  [{a: "IMINGZHA", b: "HAIMIN ...

  3. ABAP内表数据做层次XML输出

      *&---------------------------------------------------------------------**& Report  Z_BARRY ...

  4. ABAP 内表 详解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Abap 内表的语法

    ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的  内表支持循环对每行数据进行操作,也支持整体操作 ...

  6. REUSE_ALV_GRID_DISPLAY显示ALV,设置可编辑时,与内表数据同步问题

    使用function module: REUSE_ALV_GRID_DISPLAY显示ALV,并设置alv某些列可编辑,可是编辑后发现对应的内表数据并没有随之改变.记得需要设置一个参数的值,怎么想也记 ...

  7. Elasticsearch:如何把Elasticsearch中的数据导出为CSV格式的文件

    本教程向您展示如何将数据从Elasticsearch导出到CSV文件. 想象一下,您想要在Excel中打开一些Elasticsearch中的数据,并根据这些数据创建数据透视表. 这只是一个用例,其中将 ...

  8. 数据可视化:CSV格式,JSON格式

    下载CSV格式数据,进行可视化 csv.reader()创建一个与文件有关联的阅读器(reader)对象,reader处理文件中的第一行数据,并将每一项数据都存储在列表中 head_row = nex ...

  9. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)

    *********************************************************************** * Title           : ZSDF003  ...

随机推荐

  1. Linux/Ubuntu sudo不用输入密码的方法

    通常我们并不以root身份登录,但是当我们执行某些命令 (command)时需要用到root权限,我们通常都是用"sudo command"来执行command.由于使用Ubunt ...

  2. javacc学习

    为什么要研究这些,除了个人兴趣之外,还有可以了解语言是怎样解析字符串生成逻辑代码. 他的应用性也是非常之广,如人工智能方面,把复杂的逻辑抽象成简单的文法,不懂编程的人都可以使用 说到人工智能,数据库S ...

  3. [LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence

    一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全 ...

  4. jdk的设置及安装android studio提示does not point to a valid jvm问题

    设置方法: 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: JAVA_HOME值为:安装JDK的目录, 我的为C:\Program Files\Java\ ...

  5. log4net各种Filter使用

    log4net里面的filter类常用的为: 1.DenyAllFilter 拒绝所用的日志输出 <filter type="log4net.Filter.LevelMatchFilt ...

  6. Knockout 新版应用开发教程之Computed Observables

    Computed Observables 如果你有监控属性firstName和lastName的话,此时如果你想要显示全名? 这个时候computed(以前叫做依赖)监控属性就出马了,这是一个函数用来 ...

  7. Sass学习之路:Sass、Compass安装与命令行

    导言 CSS不是一门真正意义上的编程语言,很多编程语言理所当然的特性(比如变量),都不被支持.同时再开发模块化的web项目的时候,也要避免相互干扰.为了弥补CSS的这些不足,就产生了CSS预处理器,S ...

  8. 编写高质量JS代码的68个有效方法(十二)

    No.56.避免不必要的状态 Tips: 尽可能地使用无状态的API 如果API是有状态的,标示出每个操作与哪些状态有关联 无状态的API简洁,更容易学习和使用,也不需要考虑其他的状态.如: 'tes ...

  9. DDD:《实现领域驱动》拾贝(待续)

    Design is not just what it looks like and feels like. Design is how it works.

  10. RPM安装命令总结--转载

    原地址:http://www.cnblogs.com/zqwang0929/p/3352237.html 在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装.卸载及管理等操作.RPM 的 ...