EXCEL数据导入到内表中的处理

    CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
      EXPORTING
        filename    = p_upload
        i_begin_col = 2
        i_begin_row = 7
        i_end_col   = 50
        i_end_row   = 3000
        sheet_name  = '财务视图'
      TABLES
        intern      = lt_tab[].

    LOOP AT lt_tab.
      CONDENSE lt_tab-value.
      ASSIGN COMPONENT lt_tab-col OF STRUCTURE gs_upload_fi TO <fs>.         "动态方法将值传到相应的内表
      IF <fs> IS ASSIGNED.
        MOVE lt_tab-value TO <fs>.
        UNASSIGN <fs>.
      ENDIF.
      AT END OF row.
        APPEND gs_upload_fi TO gt_upload_fi.
        CLEAR gs_upload_fi.
      ENDAT.
    ENDLOOP. 

有几个提醒的地方:

 一、首先我们要建一个与EXCEL列一模一样的结构,比如上面的gs_upload_fi.

二、上面我把标准的函数拷贝了一个自定义的出来,为的是能够读取多个SHEET页,这里面

     EXCEL数据导入到内表中的处理

 

  * 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.

*->BEGIN OF ADD-ON BY EY_SGQ
**  set property of application 'Visible' = 1.
**  m_message.
  if SHEET_NAME = SPACE."用默认模式
    get property of  APPLICATION 'ACTIVESHEET' = WORKSHEET.
    M_MESSAGE.
  else.
*-->可以实现读取多个sheet
    call method of APPLICATION 'WORKSHEETS' = WORKSHEET
      exporting
        #1 = SHEET_NAME.

    call method of WORKSHEET 'Activate'.
    M_MESSAGE.
  endif.
*---END OF------------------------------------------------


* 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.

注意在主程序里添加代码如上,BEGIN OF ADD ON 中间就是需要添加的代码

三、字段符号一定要UNASIGN,因为在AT END OF语句的影响下,会发生有的字符变成*****而无法写入的情况。