需求:将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. Unity 模型导入导出

    从3DMAX导出,参考: http://tieba.baidu.com/p/2807225555 -> 使用3dmax 2013,会自带导出 fbx 的功能 -> 从 3dmax 导出 - ...

  2. ruby -- 进阶学习(三)Strong Parameters在rail3.0和4.0中的区别

    今天coding的时候遇到一个未知的类型,于是用puts logo_params.class查了下数据类型,然后google了一下发现是 Strong Parameter Strong paramet ...

  3. 编写高质量JS代码的68个有效方法(六)

    [20141213]编写高质量JS代码的68个有效方法(六) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...

  4. [OpenCV] Install openCV in Qt Creator

    Learn openCV.pdf qmake: link with opencv (Key Point) QT += core gui greaterThan(QT_MAJOR_VERSION, 4) ...

  5. iOS-验证码倒计时60秒

    一. 要求 1.点击获取验证码按钮,60秒倒计时,按钮变成不可点击状态,按钮文字变成倒计时的秒数. 2.当倒计时为0的时候,释放掉定时器NSTimer,按钮变成可以点击状态,按钮文字变成"获 ...

  6. Laravel 5 事件的使用

    事件类通常被保存在 app/Events 目录下,而它们的处理程序则被保存在 app/Handlers/Events 目录下. 事件的创建 下面我们用artisan来创建一个事件,比如叫CqhTest ...

  7. JavaScript之旅(二)

    JavaScript之旅(二) 二.进阶知识 js的正则表达式 异常处理 调试 变量提升 表单验证 JSON javascript:void(0) JavaScript 代码规范 二.进阶知识 1. ...

  8. LVM快照(snapshot)备份

    转载自:http://wenku.baidu.com/link?url=cbioiMKsfrxlzrJmoUMaztbrTelkE0FQ8F9qUHX7sa9va-BkkL4amvzCCAKg2hBv ...

  9. [ShortCut] Visual Studio快捷键

    msdn官方快捷键说明:https://msdn.microsoft.com/zh-cn/library/da5kh0wa.aspx 测试工具: visual studio 2013 操作步骤: 1. ...

  10. Mybatis choose (when, otherwise)标签

    choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束.当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的s ...