将EXCEL文件上传到SAP AS的内表

本文介绍了一种使用ABAP程序从Excel文件中读取数据并将其转换为内部表的方法。通过调用特定函数实现Excel文件的解析,并将数据按列分配到内部表的相应字段。此外,还提供了一个示例程序,演示了如何处理Excel数据。

REPORT ZEXCELUP.

TABLES: ALSMEX_TABLINE.

DATA: BEGIN OF IEXCEL OCCURS 0.
      INCLUDE STRUCTURE ALSMEX_TABLINE.
DATA: END OF IEXCEL.

* No of columns
DATA: BEGIN OF data_tab OCCURS 0,
       value_0001(50),
       value_0002(50),
       value_0003(50),
       value_0004(50),
       value_0005(50),
       value_0006(50),
       value_0007(50),
       value_0008(50),
       value_0009(50),
       value_0010(50),
       value_0011(50),
       value_0012(50),
       value_0013(50),
       value_0014(50),
       value_0015(50),
       value_0016(50),
       value_0017(50),
       value_0018(50),
       value_0019(50),
       value_0020(50),
       value_0021(50),
       value_0022(50),
       value_0023(50),
       value_0024(50),
       value_0025(50),
       value_0026(50),
       value_0027(50),
       value_0028(50),
       value_0029(50),
       value_0030(50),
       value_0031(50),
       value_0032(50),
       value_0033(50),
       value_0034(50),
       value_0035(50),
       value_0036(50),
       value_0037(50),
       value_0038(50),
       value_0039(50),
       value_0040(50),
       value_0041(50),
       value_0042(50),
       value_0043(50),
       value_0044(50),
       value_0045(50),
       value_0046(50),
       value_0047(50),
       value_0048(50),
       value_0049(50),
       value_0050(50),
       value_0051(50),
       value_0052(50),
       value_0053(50),
       value_0054(50),
       value_0055(50),
       value_0056(50),
       value_0057(50),
       value_0058(50),
       value_0059(50),
       value_0060(50),
       value_0061(50),
       value_0062(50),
       value_0063(50),
       value_0064(50),
       value_0065(50),
       value_0066(50),
       value_0067(50),
       value_0068(50),
       value_0069(50),
       value_0070(50),
       value_0071(50),
       value_0072(50),
       value_0073(50),
       value_0074(50),
       value_0075(50),
       value_0076(50),
       value_0077(50),
       value_0078(50),
       value_0079(50),
       value_0080(50),
       value_0081(50),
       value_0082(50),
       value_0083(50),
       value_0084(50),
       value_0085(50),
       value_0086(50),
       value_0087(50),
       value_0088(50),
       value_0089(50),
       value_0090(50),
       value_0091(50),
       value_0092(50),
       value_0093(50),
       value_0094(50),
       value_0095(50),
       value_0096(50),
       value_0097(50),
       value_0098(50),
       value_0099(50),
       value_0100(50).
DATA: END OF data_tab.

DATA: tind(4) TYPE n.
DATA: zwfeld(19).
FIELD-SYMBOLS: <fs1>.

PARAMETERS: FILENM   LIKE rlgrap-filename MEMORY ID M01,
            NOHEADER AS CHECKBOX.

call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  exporting
    filename                      = FILENM
    i_begin_col                   = 1
    i_begin_row                  = 1
    i_end_col                     = 100
    i_end_row                     = 30000
  tables
    intern                        = IEXCEL
  EXCEPTIONS
    INCONSISTENT_PARAMETERS       = 1
    UPLOAD_OLE                    = 2
    OTHERS                        = 3.

if sy-subrc <> 0.
   WRITE: / 'EXCEL UPLOAD FAILED ', FILENM, SY-SUBRC.
ELSE.
  SORT IEXCEL BY row col.
  LOOP AT IEXCEL.
    IF NOHEADER = 'X'
    AND IEXCEL-row = 1.
      CONTINUE.
    ENDIF.
    tind = IEXCEL-col.
    CONCATENATE 'DATA_TAB-VALUE_' tind INTO zwfeld.
    ASSIGN (zwfeld) TO <fs1>.
    <fs1> = IEXCEL-value.
    AT END OF row.
      APPEND data_tab.
      WRITE:/ 'data_tab ', data_tab-value_0001, data_tab-value_0002,
                           data_tab-value_0003, data_tab-value_0004.
      CLEAR data_tab.
    ENDAT.
  ENDLOOP.
endif.

 
### 将Excel数据动态插入到ABAP内部 在处理将外部Excel文件中的数据导入至SAP系统的内部时,可以采用多种方式实现这一目标。这里介绍一种基于`CL_GUI_FRONTEND_SERVICES`类的方法来读取本地磁盘上的Excel文件,并将其内容加载到内中。 #### 使用`CL_GUI_FRONTEND_SERVICES`读取Excel文件 通过调用`cl_gui_frontend_services=>gui_upload`方法可以直接从客户端计算机上选取并上传指定路径下的Excel文件。此过程允许程序获取整个工作簿的内容作为字符串数组返回给后台服务器端的应用逻辑处理器(ALP),之后再进一步解析这些原始数据转换成适合存储于内存结构体内的格式。 对于具体实施细节如下: 1. **定义数据对象** 为了能够接收来自前端传来的每一行记录,在开始之前先声明必要的变量与格类型用于暂存中间状态的数据项以及最终要填充的目标内实例化后的副本。 ```abap DATA: lv_filename TYPE string, lt_excel_data TYPE TABLE OF string. TYPES: BEGIN OF ty_itab, field1 TYPE char20, "假设这是你要映射的第一个字段 field2 TYPE i, "第二个整型字段... ... END OF ty_itab. DATA: lt_final_table TYPE STANDARD TABLE OF ty_itab. ``` 2. **选择并上传文件** 利用对话框让用户挑选待处理的工作薄位置,接着执行实际的传输动作。 ```abap CALL METHOD cl_gui_frontend_services=>file_open_dialog CHANGING filename = lv_filename. IF NOT lv_filename IS INITIAL. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = lv_filename filetype = 'ASC' IMPORTING filelength = DATA(lv_file_length) CHANGING data_tab = lt_excel_data[] EXCEPTIONS OTHERS = 1. ENDIF. ``` 3. **解析CSV/TSV格式文本** 如果所选文件是以逗号分隔值(Comma-Separated Values)或制符分割(Tab-Separated Values)的形式保存,则需逐行拆解每条目之间的界限以便正确分配各列对应的属性名及其关联的实际值得关系对儿。 4. **构建内部** 最后一步就是遍历经过初步清理过的临时容器(`lt_excel_data`)里的每一个元素,依据预设好的规则完成向目的集合(`lt_final_table`)里追加新成员的操作流程。 ```abap LOOP AT lt_excel_data INTO DATA(ls_line). SPLIT ls_line AT ',' INTO FIELD-SYMBOL(<fs_field>) VALUE (lv_value). APPEND INITIAL LINE TO lt_final_table ASSIGNING FIELD-SYMBOL(<ls_target>). <ls_target>-field1 = COND #( WHEN sy-tabix EQ 1 THEN lv_value ). <ls_target>-field2 = COND #( WHEN sy-tabix EQ 2 THEN lv_value AS INT ). CLEAR: ls_line, lv_value. ENDLOOP. ``` 上述代码片段仅提供了一个简化版的概念验证模型,真实场景下可能还需要考虑更多因素如异常情况捕获机制、性能优化措施等[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值