需求:将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. Java分布式应用技术架构介绍

    分布式架构的演进 系统架构演化历程-初始阶段架构

  2. MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程

    前文: hibernate带给我们的O/RMapping思想是很正确的,即从面相对象的角度来设计工程中的实体对象,建立pojo,然后在编写hbm.xml映射文件来生成数据表.但是在实际开发中,往往我们 ...

  3. 2012年中国科学技术信息研究所发布自然科学SCI(E)论文期刊分区列表

    分区 期刊名称 ISSN 学科名称 学科名称(中文) 总被引频次 影响因子 5年影响因子 即年影响因子 被引半衰期 特征因子 论文影响指标 1区 ACM COMPUT SURV 0360-0300 C ...

  4. [C#]LDAP验证用户名和密码

    测试环境:VS2008, NET Framework 3.5 公司打算改用LDAP来存储用户名和密码,现在用C#测试下如何能拿到LDAP中的用户名,并检测用户密码是否正确.即输入用户名和密码,可以检验 ...

  5. c/c++:动态库 静态库 linux/windows 例子 (转)

    作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). C++静 ...

  6. 【转载】JDBC连接各种数据库的字符串

    oracle    driverClass:oracle.jdbc.driver.OracleDriver    url:jdbc:oracle:thin:@127.0.0.1:1521:dbname ...

  7. ruby self.included用法

    ===Module#included 当一个模块混入到类时,如果该模块的included方法已经定义,那么该方法被调用.该方法的唯一参数就是接受混含的类的名字. module M def self.i ...

  8. Java知多少(105)套接字(Socket)

    网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www ...

  9. Asp.net Mvc4 使用Cas单点登录

    因项目需要,使用了耶鲁大学的Cas单点登录方案,在java中使用一直正常,但是在.Net中碰到了循环重定向的问题,反复测试后,总算解决了,最终的配置如下: <?xml version=" ...

  10. Web开发入门疑问收集(不定期更新)

    bootstrap container和container-fluid的区别 原始链接 container 根据显示设备满足的最小宽度,来决定实际内容宽度,是一个根据设置内容阶梯式响应的布局. 例子: ...