SAP 导入EXCEL

"调用方法  
CALL METHOD zcl_common_method=>import_excel
    EXPORTING
      iv_filename   = lv_filename
      iv_start_row  = '4' "开始获取的行号
    IMPORTING
      ev_error_text = error_text
    CHANGING
      ct_excel      = lt_tab
    EXCEPTIONS
      file_open_error = 1
      OTHERS          = 2.
"下面是方法
METHOD import_excel.
  "get the content of excel.
  TYPES: BEGIN OF columninfo,
           column     TYPE i,
           columnname TYPE string,
         END OF columninfo.
  TYPES columnsinfo TYPE STANDARD TABLE OF columninfo WITH EMPTY KEY.
  DATA columnfromfile TYPE columnsinfo.

*单个sheet页面导入
*create a xlsx handler
  DATA(xlsxhandler) = cl_ehfnd_xlsx=>get_instance( )."创建了句柄 *open xlsx into xstring
  TRY.
      DATA(xstring_excel) = cl_openxml_helper=>load_local_file( iv_filename ). "获取excel路径 为 xstring格式
    CATCH cx_openxml_not_found INTO DATA(openxml_not_found).
      ev_error_text = openxml_not_found->get_text( ).
  ENDTRY.
  IF ev_error_text IS NOT INITIAL.
    RETURN.
  ENDIF.

*load the xlsx
  TRY.
      DATA(xlsxdocument) = xlsxhandler->load_doc( iv_file_data = xstring_excel ). "加载excel
    CATCH cx_openxml_format cx_openxml_not_allowed cx_dynamic_check INTO DATA(openxml_format).
      ev_error_text = openxml_format->get_text( ).
  ENDTRY.
  IF ev_error_text IS NOT INITIAL.
    RETURN.
  ENDIF.

*获取页码数据
  DATA:lv_id TYPE i VALUE 1.
  DATA(lt_sheets) = xlsxdocument->get_sheets( )."获取sheet页面
  READ TABLE lt_sheets INTO DATA(ls_sheets) INDEX 1.
  lv_id = ls_sheets-sheet_id.
  TRY.
      DATA(firstsheet) = xlsxdocument->get_sheet_by_id( iv_sheet_id = lv_id ).
    CATCH cx_openxml_format cx_openxml_not_found cx_dynamic_check INTO openxml_format.
      ev_error_text = openxml_format->get_text( ) .
      ev_error_text = |获取第一个sheet页失败: | && ev_error_text .
  ENDTRY.

  IF ev_error_text IS NOT INITIAL.
    RETURN.
  ENDIF.

  "return if no sheet in xlsx file
  CHECK NOT firstsheet IS INITIAL.

  DATA(columncount) = firstsheet->get_last_column_number_in_row( 1 ). "获取第1行列数 (一共几列)
  DATA column TYPE i VALUE 1.

*获取数据结构
  DATA:ls_tab_ref TYPE REF TO data.
  CREATE DATA ls_tab_ref LIKE LINE OF ct_excel.

  DATA tablestructure TYPE REF TO cl_abap_structdescr.
  tablestructure ?= cl_abap_typedescr=>describe_by_data_ref( ls_tab_ref ). "获取内表的 components
  DATA(tablecomponents) = tablestructure->get_components( ).

  DATA(rowcount) = firstsheet->get_last_row_number( ).
  DATA(currentrow) = iv_start_row.
*获取数据到内表
  CLEAR column.
  WHILE currentrow <= rowcount.
    APPEND INITIAL LINE TO ct_excel ASSIGNING FIELD-SYMBOL(<currentrow>).
    DO columncount TIMES.
      column = column + 1.
      DATA(cellvalue) = firstsheet->get_cell_content(
        EXPORTING
          iv_row    = currentrow
          iv_column = column ).
      ASSIGN COMPONENT column OF STRUCTURE <currentrow> TO FIELD-SYMBOL(<cellvalue>).
      <cellvalue> = cellvalue.
    ENDDO.
    CLEAR column.
    currentrow = currentrow + 1.
  ENDWHILE.

ENDMETHOD.

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值