• ABAP EXCEL数据上传时因为栏位字符串过长而被截断的问题解决方法


    直接上代码

    REPORT ztest_cj08.

    DATA: filename TYPE string VALUE 'c:bathinput.csv'.
    TYPESBEGIN OF itab,
             F(20),
           END OF itab.
    DATA: data_tab TYPE STANDARD TABLE OF itab.
    DATA: wa_tab TYPE itab.
    DATA: file_filter TYPE string,
          rc          TYPE i.
    DATA: file_table TYPE filetable.
    DATA: wa_file_table TYPE LINE OF filetable.
    DATA lv_fname  TYPE localfile.
    DATA: lt_upload   TYPE TABLE OF zalsmex_tabline.


    file_filter 'All Files (*.*)|*'.

    *弹框取文件路径
    PERFORM frm_getfilename CHANGING lv_fname.

    *取EXCEL表数据
    CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
      EXPORTING
        filename                = lv_fname
        i_begin_col             1
        i_begin_row             6
        i_end_col               35
        i_end_row               65535
    *   I_SHEET_NAME            = LV_FNAME
      TABLES
        intern                  = lt_upload
      EXCEPTIONS
        inconsistent_parameters 1
        upload_ole              2
        OTHERS                  3.
    IF sy-subrc <> 0.
      MESSAGE s018(zsd01) DISPLAY LIKE 'E'.
      STOP.

    ENDIF.

    其中用到的FM:ZALSM_EXCEL_TO_INTERNAL_TABLE,代码如下

    function ZALSM_EXCEL_TO_INTERNAL_TABLE .
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  IMPORTING
    *"     VALUE(FILENAME) LIKE  RLGRAP-FILENAME
    *"     VALUE(I_BEGIN_COL) TYPE  I
    *"     VALUE(I_BEGIN_ROW) TYPE  I
    *"     VALUE(I_END_COL) TYPE  I
    *"     VALUE(I_END_ROW) TYPE  I
    *"  TABLES
    *"      INTERN STRUCTURE  ZALSMEX_TABLINE
    *"  EXCEPTIONS
    *"      INCONSISTENT_PARAMETERS
    *"      UPLOAD_OLE
    *"----------------------------------------------------------------------

      data: EXCEL_TAB     type  TY_T_SENDER.
      data: LD_SEPARATOR  type  C.
      data: APPLICATION type  OLE2_OBJECT,
            WORKBOOK    type  OLE2_OBJECT,
            RANGE       type  OLE2_OBJECT,
            WORKSHEET   type  OLE2_OBJECT.
      data: H_CELL  type  OLE2_OBJECT,
            H_CELL1 type  OLE2_OBJECT.
      data: LD_RC         type I.

    *   Rückgabewert der Methode "clipboard_export     "

    * Makro für Fehlerbehandlung der Methods
      define M_MESSAGE.
        case sy-subrc.
          when 0.
          when 1.
            message id sy-msgid type sy-msgty number sy-msgno
                    with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          when othersraise upload_ole.
        endcase.
      end-of-definition.


    * check parameters
      if I_BEGIN_ROW > I_END_ROWraise INCONSISTENT_PARAMETERSendif.
      if I_BEGIN_COL > I_END_COLraise INCONSISTENT_PARAMETERSendif.

    * Get TAB-sign for separation of fields
      class CL_ABAP_CHAR_UTILITIES definition load.
      LD_SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

    * open file in Excel
      if APPLICATION-HEADER = SPACE or APPLICATION-HANDLE -1.
        create object APPLICATION 'Excel.Application'.
        M_MESSAGE.
      endif.
      call method of APPLICATION 'Workbooks' = WORKBOOK.
      M_MESSAGE.
      call method of WORKBOOK 'Open' exporting #1 = FILENAME.
      M_MESSAGE.

    *  set property of application 'Visible' = 1.
    *  m_message.

      get property of  APPLICATION 'ACTIVESHEET' = WORKSHEET.
      M_MESSAGE.

    * mark whole spread sheet
      call method of WORKSHEET 'Cells' = H_CELL
          exporting #1 = I_BEGIN_ROW #2 = I_BEGIN_COL.
      M_MESSAGE.
      call method of WORKSHEET 'Cells' = H_CELL1
          exporting #1 = I_END_ROW #2 = I_END_COL.
      M_MESSAGE.

      call method  of WORKSHEET 'RANGE' = RANGE
                     exporting #1 = H_CELL #2 = H_CELL1.
      M_MESSAGE.
      call method of RANGE 'SELECT'.
      M_MESSAGE.

    * copy marked area (whole spread sheet) into Clippboard
      call method of RANGE 'COPY'.
      M_MESSAGE.

    * read clipboard into ABAP
      call method CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_IMPORT
        importing
          DATA       = EXCEL_TAB
        exceptions
          CNTL_ERROR 1
    *     ERROR_NO_GUI         = 2
    *     NOT_SUPPORTED_BY_GUI = 3
          others     4.
      if SY-SUBRC <> 0.
        message A037(ALSMEX).
      endif.
      if EXCEL_TAB[] is initial.
        exit.
      endif.

      perform SEPARATED_TO_INTERN_CONVERT tables EXCEL_TAB INTERN
                                          using  LD_SEPARATOR.

    * clear clipboard
      refresh EXCEL_TAB.
      call method CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
        importing
          DATA       = EXCEL_TAB
        changing
          RC         = LD_RC
        exceptions
          CNTL_ERROR 1
    *     ERROR_NO_GUI         = 2
    *     NOT_SUPPORTED_BY_GUI = 3
          others     4.

    * quit Excel and free ABAP Object - unfortunately, this does not kill
    * the Excel process
      call method of APPLICATION 'QUIT'.
      M_MESSAGE.

    * >>>>> Begin of change note 575877
    * to kill the Excel process it's necessary to free all used objects
      free object H_CELL.       M_MESSAGE.
      free object H_CELL1.      M_MESSAGE.
      free object RANGE.        M_MESSAGE.
      free object WORKSHEET.    M_MESSAGE.
      free object WORKBOOK.     M_MESSAGE.
      free object APPLICATION.  M_MESSAGE.
    * <<<<< End of change note 575877
    endfunction.

    参数如下:

  • 相关阅读:
    FZU 2098 刻苦的小芳(卡特兰数,动态规划)
    卡特兰数总结
    FZU 1064 教授的测试(卡特兰数,递归)
    HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
  • 原文地址:https://www.cnblogs.com/jingqing/p/9476045.html
Copyright © 2020-2023  润新知