我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

这篇文章主要介绍了如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

ALSM_EXCEL_TO_INTERNAL_TABLE有两个限制:

  每个CELL只能导入前50个字符;

  如果超过9999行,行号会初始化为从零开始

解决办法:

  COPY  ALSM_EXCEL_TO_INTERNAL_TABLE 为 ZALSM_EXCEL_TO_INTERNAL_TABLE ,并做少许改动即可

  定义结构新的返回ZSALSMEX_TABLINE

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

函数输入输出

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

代码如下(定义与ZEXCEL自定义函数组下,便于代码管理):

function zalsm_excel_to_internal_table.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(FILENAME) LIKE  RLGRAP-FILENAME
*"     VALUE(I_BEGIN_COL) TYPE  INT4
*"     VALUE(I_BEGIN_ROW) TYPE  INT4
*"     VALUE(I_END_COL) TYPE  INT4
*"     VALUE(I_END_ROW) TYPE  INT4
*"     VALUE(I_SHEET_NO) TYPE  I OPTIONAL
*"  TABLES
*"      INTERN STRUCTURE  ZSALSMEX_TABLINE
*"----------------------------------------------------------------------


  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 others. raise upload_ole.
    endcase.
  end-of-definition.


* check parameters
  if i_begin_row > i_end_row. raise inconsistent_parameters. endif.
  if i_begin_col > i_end_col. raise inconsistent_parameters. endif.

* 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.
  if i_sheet_no = space."用默认模式
    get property of  application 'ACTIVESHEET' = worksheet.
    m_message.
  else.
*-->可以实现读取多个sheet
    call method of application 'WORKSHEETS' = worksheet
      exporting
        #1 = i_sheet_no.

    call method of worksheet 'Activate'.
    m_message.
  endif.

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

  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.

全变变量:LZEXCELTOP

FUNCTION-POOL ZEXCEL.                       "MESSAGE-ID ..

***下载EXCEL
include ole2incl.
data: gv_excel    type ole2_object,
      gv_workbook type ole2_object,
      gv__map     type ole2_object,
      gv_sheet    type ole2_object,
      gv_newsheet type ole2_object,
      gs_cell1    type ole2_object,
      gs_cell2    type ole2_object,
      gs_range    type ole2_object.

type-pools kcdu.


****上传EXCLE
*DATA: dy_line TYPE REF TO data.
*FIELD-SYMBOLS: <dyn_wa>,
*               <dyn_value> TYPE any.

********************************************
type-pools: ole2.

*      value of excel-cell
types: ty_d_itabvalue type zsalsmex_tabline-value,
*      internal table containing the excel data
       ty_t_itab      type zsalsmex_tabline   occurs 0,

*      line type of sender table
       begin of ty_s_senderline,
         line(4096) type c,
       end of ty_s_senderline,
*      sender table
       ty_t_sender type ty_s_senderline  occurs 0.

*
constants:  gc_esc              value '"'.

types:
  begin of ty_kcdu_srec,
    srec type c length 2048,
  end of ty_kcdu_srec.

types ty_t_kcdu_srec type table of ty_kcdu_srec.

types ty_ztsalsmex_tab_6  type table of zsbc_csv_tab.



constants: c_comma value ',',
           c_point value '.',
           c_esc   value '"'.

constants: c_separator type char1 value ',',
           c_quo       type char1 value '"'.

全局form:LZEXCELF01

*----------------------------------------------------------------------*
***INCLUDE LZEXCELF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  separated_to_intern_convert
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EXCEL_TAB  text
*      -->P_INTERN  text
*      -->P_LD_SEPARATOR  text
*----------------------------------------------------------------------*
form separated_to_intern_convert tables i_tab       type ty_t_sender
                                        i_intern    type ty_t_itab
                                 using  i_separator type c.
  data: l_sic_tabix like sy-tabix,
        l_sic_col   type kcd_ex_col.
  data: l_fdpos     like sy-fdpos.

  refresh i_intern.

  loop at i_tab.
    l_sic_tabix = sy-tabix.
    l_sic_col = 0.
    while i_tab ca i_separator.
      l_fdpos = sy-fdpos.
      l_sic_col = l_sic_col + 1.
      perform line_to_cell_separat tables i_intern
                                   using  i_tab l_sic_tabix l_sic_col
                                          i_separator l_fdpos.
    endwhile.
    if i_tab <> space.
      clear i_intern.
      i_intern-row = l_sic_tabix.
      i_intern-col = l_sic_col + 1.
      i_intern-value = i_tab.
      append i_intern.
    endif.
  endloop.
endform.                    " SEPARATED_TO_INTERN_CONVERT
*---------------------------------------------------------------------*
form line_to_cell_separat tables i_intern    type ty_t_itab
                          using  i_line
                                 i_row       like sy-tabix
                                 ch_cell_col type kcd_ex_col
                                 i_separator type c
                                 i_fdpos     like sy-fdpos.
  data: l_string   type ty_s_senderline.
  data  l_sic_int  type i.

  clear i_intern.
  l_sic_int = i_fdpos.
  i_intern-row = i_row.
  l_string = i_line.
  i_intern-col = ch_cell_col.
* csv Dateien mit separator in Zelle: --> ;"abc;cd";
  if ( i_separator = ';' or  i_separator = ',' ) and
       l_string(1) = gc_esc.
    perform line_to_cell_esc_sep using l_string
                                       l_sic_int
                                       i_separator
                                       i_intern-value.
  else.
    if l_sic_int > 0.
      i_intern-value = i_line(l_sic_int).
    endif.
  endif.
  if l_sic_int > 0.
    append i_intern.
  endif.
  l_sic_int = l_sic_int + 1.
  i_line = i_line+l_sic_int.
endform.                    "line_to_cell_separat

*---------------------------------------------------------------------*
form line_to_cell_esc_sep using i_string
                                i_sic_int      type i
                                i_separator    type c
                                i_intern_value type ty_d_itabvalue.
  data: l_int         type i,
        l_cell_end(2).
  field-symbols: <l_cell>.
  l_cell_end = gc_esc.
  l_cell_end+1 = i_separator .

  if i_string cs gc_esc.
    i_string = i_string+1.
    if i_string cs l_cell_end.
      l_int = sy-fdpos.
      assign i_string(l_int) to <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 2.
      i_sic_int = l_int.
      i_string = i_string+l_int.
    elseif i_string cs gc_esc.
*     letzte Celle
      l_int = sy-fdpos.
      assign i_string(l_int) to <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 1.
      i_sic_int = l_int.
      i_string = i_string+l_int.
      l_int = strlen( i_string ).
      if l_int > 0 . message x001(kx) . endif.
    else.
      message x001(kx) . "was ist mit csv-Format
    endif.
  endif.

endform.                    "line_to_cell_esc_sep

感谢你能够认真阅读完这篇文章,希望小编分享的“如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题

这篇文章主要介绍了如何解决EXCEL上传函数ALSM_EXCEL_TO_INTERNAL_TABLE的重新封装问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ALSM_EX
2023-06-05

如何解决 PHP 函数中重复代码的问题?

通过封装重复代码,可以使用函数和闭包来消除代码中的冗余。函数将重复的任务封装成可重复使用的单元,闭包封装重复代码,并可以在函数外部访问作用域变量。实战案例中,我们将重复的发送电子邮件代码封装到函数中,以避免重复和冗余。如何在 PHP 函数中
如何解决 PHP 函数中重复代码的问题?
2024-05-01

如何在java中解决main函数中的args数组传值问题

这篇文章将为大家详细讲解有关如何在java中解决main函数中的args数组传值问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java可以用来干什么Java主要应用于:1. web开发;
2023-06-06

如何解决C++访问者模式模板函数无法重载的问题

本篇内容主要讲解“如何解决C++访问者模式模板函数无法重载的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决C++访问者模式模板函数无法重载的问题”吧!背景最近遇到一个比较棘手的场景,
2023-06-22

一键重装Win10出现“你的电脑遇到问题,需要重新启动”如何解决

本文小编为大家详细介绍“一键重装Win10出现“你的电脑遇到问题,需要重新启动”如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“一键重装Win10出现“你的电脑遇到问题,需要重新启动”如何解决”文章能帮助大家解决疑惑,下面跟着小编的
2023-06-27

如何在IIS上安装SSL证书并解决PHP无法获取数据的问题

在IIS上安装SSL证书并解决PHP无法获取数据的问题在网站开发中,使用SSL证书来保障数据传输的安全是非常重要的。而在Windows平台上,IIS(Internet Information Services)是常用的Web服务器软件,本
如何在IIS上安装SSL证书并解决PHP无法获取数据的问题
2024-03-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录