zoukankan      html  css  js  c++  java
  • ABAP->内表数据下载到CSV格式(原创转载请注明)

    需求:将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(6TYPE 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(6TYPE 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.
  • 相关阅读:
    转:浅谈UNIX下Apache的MPM及httpd.conf配置文件中相关参数配置
    LINUX DNS解析的3种修改方法~
    Linux ftp访问控制配置,包括访问ftp权限和访问ftp目录权限
    composer 安装提示 PHP Warning: readfile(): SSL operation failed with code 1
    PHPExcel yii2 加载使用
    转:mysql根据经纬度查找排序
    bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~
    ACM学习历程—HDU1717 小数化分数2(gcd)
    ACM学习历程—HDU1716 排列2(dfs && set容器)
    ACM学习历程—BestCoder 2015百度之星资格赛1001 大搬家(递推 && 组合数学)
  • 原文地址:https://www.cnblogs.com/sap-vip/p/5591127.html
Copyright © 2011-2022 走看看