首页 > 其他分享 >ABAP简单代码实现上载Excel多Sheet页

ABAP简单代码实现上载Excel多Sheet页

时间:2024-06-17 17:22:39浏览次数:13  
标签:Sheet lo Excel lt lv ABAP sheet DATA row

  1 class ZCL_EXCEL_TOOLS definition
  2   public
  3   final
  4   create public .
  5 
  6 public section.
  7 
  8   methods UPLOAD
  9     importing
 10       !FILE type STRING
 11     returning
 12       value(DATA) type ref to DATA .
 13   methods TEST .
 14 protected section.
 15 private section.
 16 ENDCLASS.
 17 
 18 
 19 
 20 CLASS ZCL_EXCEL_TOOLS IMPLEMENTATION.
 21 
 22 
 23 * <SIGNATURE>---------------------------------------------------------------------------------------+
 24 * | Instance Public Method ZCL_EXCEL_TOOLS->TEST
 25 * +-------------------------------------------------------------------------------------------------+
 26 * +--------------------------------------------------------------------------------------</SIGNATURE>
 27   METHOD test.
 28     DATA(data) = upload( EXPORTING file = conv STRING( 'C:\xxxx.xlsx' ) ).
 29     ASSIGN data->* TO FIELD-SYMBOL(<fs_data>).
 30     BREAK-POINT.
 31   ENDMETHOD.
 32 
 33 
 34 * <SIGNATURE>---------------------------------------------------------------------------------------+
 35 * | Instance Public Method ZCL_EXCEL_TOOLS->UPLOAD
 36 * +-------------------------------------------------------------------------------------------------+
 37 * | [--->] FILE                           TYPE        STRING
 38 * | [<-()] DATA                           TYPE REF TO DATA
 39 * +--------------------------------------------------------------------------------------</SIGNATURE>
 40   METHOD upload.
 41     FIELD-SYMBOLS:<ft_table>  TYPE STANDARD TABLE.
 42     TYPES:BEGIN OF ty_line,
 43             line TYPE x LENGTH 1024,
 44           END OF ty_line.
 45     DATA:lt_xtab TYPE TABLE OF ty_line.
 46     DATA:lv_max_col TYPE i.
 47     DATA lt_comp TYPE abap_component_tab.
 48     DATA lt_comps TYPE abap_component_tab.
 49 
 50     TRY.
 51         DATA(lv_exist) = cl_gui_frontend_services=>file_exist( file ).
 52         CHECK lv_exist = abap_true.
 53         cl_gui_frontend_services=>gui_upload( EXPORTING filename = file filetype = 'BIN' CHANGING data_tab = lt_xtab ).
 54         DATA(lv_xstring) = cl_bcs_convert=>xtab_to_xstring( lt_xtab ).
 55         DATA(lo_documents) = cl_ehfnd_xlsx=>get_instance( )->load_doc( lv_xstring )."
 56         DATA(lt_sheets) = lo_documents->get_sheets( ).
 57 
 58         LOOP AT lt_sheets ASSIGNING FIELD-SYMBOL(<fs_sheet>).
 59           DATA(lo_sheet) = lo_documents->get_sheet_by_id( <fs_sheet>-sheet_id ).
 60           CLEAR:lv_max_col.
 61           DO lo_sheet->get_last_row_number( ) TIMES.
 62             DATA(lv_row) = sy-index.
 63             DATA(lv_col) = lo_sheet->get_last_column_number_in_row( iv_row = lv_row ).
 64             lv_max_col = nmax( val1 = lv_max_col val2 = lv_col ).
 65           ENDDO.
 66 
 67           CLEAR:lt_comp.
 68           DO lv_max_col TIMES.
 69             APPEND INITIAL LINE TO lt_comp ASSIGNING FIELD-SYMBOL(<fs_comp>).
 70             <fs_comp>-name = |COL{ sy-index }|.
 71             <fs_comp>-type ?= cl_abap_typedescr=>describe_by_data_ref( NEW string( ) ).
 72           ENDDO.
 73 
 74           CHECK lt_comp[] IS NOT INITIAL.
 75           DATA(lo_table)  = cl_abap_tabledescr=>create( cl_abap_structdescr=>create( p_components = lt_comp p_strict = '' )  ).
 76           CREATE:DATA data TYPE HANDLE lo_table.
 77           ASSIGN:data->* TO <ft_table>.
 78 
 79           APPEND INITIAL LINE TO lt_comps ASSIGNING FIELD-SYMBOL(<fs_comps>).
 80           <fs_comps>-name = |SheetName_{ <fs_sheet>-name }|.
 81           <fs_comps>-type ?= cl_abap_typedescr=>describe_by_data( <ft_table> ).
 82 
 83         ENDLOOP.
 84 
 85         CHECK lt_comps[] IS NOT INITIAL.
 86         DATA(lo_struct)  = cl_abap_structdescr=>create( p_components = lt_comps ).
 87         CREATE:DATA data TYPE HANDLE lo_struct.
 88         ASSIGN:data->* TO FIELD-SYMBOL(<fs_data>).
 89 
 90         LOOP AT lt_sheets ASSIGNING <fs_sheet>.
 91           lo_sheet = lo_documents->get_sheet_by_id( <fs_sheet>-sheet_id ).
 92           ASSIGN COMPONENT |SheetName_{ <fs_sheet>-name }| OF STRUCTURE <fs_data> TO <ft_table>.
 93           DO lo_sheet->get_last_row_number( ) TIMES.
 94             lv_row = sy-index.
 95             APPEND INITIAL LINE TO <ft_table> ASSIGNING FIELD-SYMBOL(<fs_table>).
 96             DO lo_sheet->get_last_column_number_in_row( iv_row = lv_row ) TIMES.
 97               lv_col = sy-index.
 98               ASSIGN COMPONENT |COL{ sy-index }| OF STRUCTURE <fs_table> TO FIELD-SYMBOL(<fs_value>).
 99               "CHECK xlsx_sheet->has_cell_content( iv_row = lv_row iv_column = lv_col ).
100               <fs_value> = lo_sheet->get_cell_content( iv_row = lv_row iv_column = lv_col ).
101             ENDDO.
102 
103           ENDDO.
104 
105         ENDLOOP.
106         "DATA(filecontent) = LO_DOCUMENTS->save( ).
107 
108       CATCH cx_root INTO DATA(lo_error).
109         DATA(lv_msg) = lo_error->get_text( ).
110         BREAK-POINT.
111     ENDTRY.
112 
113     FREE:lo_documents,lo_sheet.
114   ENDMETHOD.
115 ENDCLASS.

如图:

 

 

 

标签:Sheet,lo,Excel,lt,lv,ABAP,sheet,DATA,row
From: https://www.cnblogs.com/1187163927ch/p/18252825

相关文章

  • Excel单元格的“点选输入”:数据验证应用
    在Excel中,用“数据验证”功能可以设置下拉列表,二级下拉列表需要设置公式。(笔记模板由python脚本于2024年06月16日18:36:37创建,本篇笔记适合经常使用Excel处理数据的coder翻阅)【学习的细节是欢悦的历程】Python官网:https://www.python.org/Free:大咖免费“圣......
  • 【JAVA开发笔记】实战演练,如何用EasyExcel导出表格,并且自定义合并单元格
    目录1.前言2.EasyExcel简介3.EasyExcel简单导出案例讲解3.1EasyExcel依赖引入3.2测试类创建3.3Excel导出实现4.EasyExcel合并单元案例讲解4.1实现自定义合并策略4.2 使用自定义合并策略5.总结1.前言项目上,需将一个列表数据导出Excel表格,并将指定列相同......
  • c# excel
    usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;usingSystem.Web;namespaceGetPCInformation{classExcel{publicvoidExportExcel(DataTabledt){//设置导出文件路径stringpath=HttpC......
  • exceljs使用文档
    安装npminstallexceljs目录导入接口创建工作簿设置工作簿属性工作簿视图添加工作表删除工作表访问工作表工作表状态工作表属性页面设置页眉和页脚工作表视图冻结视图拆分视图自动筛选器列行AddRows处理单个单元格合并单元格InsertRowsSplic......
  • EXCEL的函数
    一、if:判断函数1、if函数的基本用法语法:if(条件,值1,值2)如果条件的结果是真,则返回值1,否则返回值2举例:如果性别是男,则称呼为先生,否则称呼为女士公式:=IF(E2="男","先生","女士")注意:如果参数是字符串,需要用英文的双引号""2、if的嵌套语法:if(条件1,值1,if(条件2,值2,值3))如果条件1......
  • Teamcenter AWC 前端导出Excel表
    1.添加xlsx.js支持://importXLSXfrom'js/xlsx.js'---开发模式可以运行,打包出错constXLSX=require('D:/Siemens/Teamcenter14/aws2/sheetjs-v0.18.5/xlsx.js');2.导出代码同poi很类似 vartableData=[];exportconstexportXlsDemo=function( ){  const......
  • 需求虽小但是问题很多,浅谈JavaScript导出excel文件
    最近我在进行一些前端小开发,遇到了一个小需求:我想要将数据导出到Excel文件,并希望能够封装成一个函数来实现。这个函数需要接收一个二维数组作为参数,数组的第一行是表头。在导出的过程中,要能够确保避免出现中文乱码的情况。另外,考虑到数组中可能包含回车、逗号、换行符等......
  • 推荐一款纯前端类似excel的在线表格,功能强大,简单易用,完全开源(带私活源码)
    你曾经想过自己也能在网页上轻松地编辑表格,无需下载复杂的软件吗?现在有一款开源项目名为 Luckysheet 的在线表格工具,是一个强大的前端应用,类似于Excel。非常简单易用,完全开源。一、介绍Luckysheet,最新版名称Univer,一款纯前端类似excel的在线表格,功能强大、配置简单、完......
  • QMenu setStyleSheet样式设置
    要实现如图所示的菜单按钮,有默认,悬停,点击三种状态;发现用Qss统一设置样式的时候,按下状态无效;QMenu::item{background:rgb(77,77,77);font-family:MicrosoftYaHeiUI;font-size:14px;height:32px;color:rgba(255,255,255,0.7);}QMenu::item:pressed//无效{......
  • SAP ABAP开发过程中如何高效率从内表中获取不重复记录?
    在SAPERP系统开发过程中,经常会遇到需要将大量数据从数据库表中提取,储存在内表中,供进一步处理之用。而在这个内表中,有时候存在大量重复的记录,若要从中得到唯一记录,有以下三种方法:方法一:内部表循环赋值,使用COLLECT语句追加记录方法二:内部表循环赋值,使用ATNEW和APPEND语......