首页 > 其他分享 >[SAP ABAP] 上传CSV文件到内表

[SAP ABAP] 上传CSV文件到内表

时间:2024-12-16 15:56:35浏览次数:5  
标签:csv 内表 数据 data ABAP user CSV TYPE

CSV文件数据

测试数据.csv

上传csv文件到内表的开发步骤:

① 选择屏幕以及上传文件的相关参数设置

② 获取上传的CSV文件数据行

自定义的csv文件,编码格式是utf-8,但是使用GUI_UPLOAD函数读取文件数据,会出现中文乱码,因此需要给形参codepage指定编码格式'8400'

③ CSV文件数据行转内表结构

1.声明一个cl_rsda_csv_converter对象

2.调用cl_rsda_csv_converter=>create创建一个实例 lo_csv

3.通过实例对象 lo_csv调用实例方法csv_to_structure,将csv文本数据行转换成自定义的数据类型(结构体)

DEBUG模式测试查看内表lt_user中的数据

此时上传的CSV文件中的数据,已写入到内表中,后续就可以通过内表对CSV数据进行操作处理或者ALV数据显示等

④ 调用REUSE_ALV_GRID_DISPLAY_LVC函数显示ALV数据

激活并运行程序,效果如下图所示:

选择需要上传的csv文件,并点击按钮

该程序执行的结果如下所示:

上述完整代码如下所示:

REPORT z437_test_2024.

DATA: lv_csv_data  TYPE string,
      lv_filename  TYPE string,                   " 文件路径
      lt_csv_lines TYPE STANDARD TABLE OF string. " 数据行内表

* 自定义数据类型
TYPES: BEGIN OF ty_user,
  id      TYPE i,       " 编号ID
  name    TYPE string,  " 姓名
  age     TYPE i,       " 年龄
  address TYPE string,  " 地址
END OF ty_user.

* 定义内表和工作区
DATA: wa_user TYPE ty_user,                       " 工作区
      lt_user TYPE STANDARD TABLE OF ty_user.     " 内表


*----------------------------------------------------------------------*
* 选择屏幕
*----------------------------------------------------------------------*
PARAMETERS p_path TYPE localfile.


*----------------------------------------------------------------------*
*  DESC: AT SELECTION-SCREEN ON VALUE-REQUEST FOR [field] 事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
  " F4值帮助
  CALL FUNCTION 'F4_FILENAME'
*   EXPORTING
*     PROGRAM_NAME        = SYST-CPROG
*     DYNPRO_NUMBER       = SYST-DYNNR
*     FIELD_NAME          = ' '
   IMPORTING
     file_name           = p_path.

lv_filename = p_path.


*----------------------------------------------------------------------*
*  DESC: START-OF-SELECTION 事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM get_csv_lines.       " 获取csv文件中的数据行
  PERFORM converter_csv_data.  " 转换csv行数据中的值
  PERFORM display_alv.         " 显示alv数据


*&---------------------------------------------------------------------*
*& Form get_csv_lines
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_csv_lines.
  " 获取上传的csv文件数据
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                      = lv_filename   " 文件路径
      codepage                      = '8400'        " 文件的编码格式(8400表示UTF-8)
    TABLES
      data_tab                      = lt_csv_lines. " 获取的数据行,保存在内表中
ENDFORM.


*&---------------------------------------------------------------------*
*& Form converter_csv_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM converter_csv_data .
  " 转换csv数据行
  DATA:lo_csv TYPE REF TO cl_rsda_csv_converter.  " 声明一个cl_rsda_csv_converter对象

  CALL METHOD cl_rsda_csv_converter=>create       " 调用cl_rsda_csv_converter=>create创建一个实例lo_csv
*    EXPORTING
*      i_delimiter      = C_DEFAULT_DELIMITER
*      i_separator      = C_DEFAULT_SEPARATOR
*      i_escape         =
*      i_line_separator = CL_ABAP_CHAR_UTILITIES=>NEWLINE
    RECEIVING
      r_r_conv         = lo_csv.

  " 循环每一行数据
  LOOP AT lt_csv_lines INTO lv_csv_data.
    " 跳过标题行(跳过第一次循环)
    AT FIRST.
      CONTINUE.
    ENDAT.

    " 通过实例对象lo_csv调用实例方法csv_to_structure,将csv文本数据行转换成定义的数据类型(结构体)
    CALL METHOD lo_csv->csv_to_structure
      EXPORTING
        i_data   = lv_csv_data
      IMPORTING
        e_s_data = wa_user.

    " 将分割好的数据结构插入到内表
    APPEND wa_user TO lt_user.
    CLEAR wa_user.
    CLEAR lv_csv_data.
  ENDLOOP.
ENDFORM.


*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_alv .
  DATA: lt_fcat TYPE lvc_t_fcat,  " 字段目录内表
        wa_fcat TYPE lvc_s_fcat.  " 字段目录工作区
  " 定义宏
  DEFINE set_fcat.
    wa_fcat-fieldname = &1.       " 设置要输出的表格列的值,在内表中定义的字段名(必须大写)
    wa_fcat-scrtext_l = &2.       " 设置要输出的表格列的列名,即ALV报表显示的列名
    APPEND wa_fcat TO lt_fcat.
    CLEAR wa_fcat.
  END-OF-DEFINITION.

** 调用宏      &1       &2
  set_fcat:  'ID'      'ID',
             'NAME'    '姓名',
             'AGE'     '年龄',
             'ADDRESS' '地址'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
   EXPORTING
     it_fieldcat_lvc                   = lt_fcat  " ALV显示字段
   TABLES
      t_outtab                         = lt_user  " 内表数据
   EXCEPTIONS
     program_error                     = 1
     OTHERS                            = 2.
ENDFORM.

标签:csv,内表,数据,data,ABAP,user,CSV,TYPE
From: https://blog.csdn.net/Hudas/article/details/144489087

相关文章

  • ABAP 百科全书的阅读目录
    文章目录ABAP开发者开卷必读基于ABAP技术栈的SAP系统设计原理的深入介绍工作中的实战经验分享ABAP和其他流行编程技术的比较ABAP内核深入介绍ABAP工作效率提升的技巧和工具ABAPCDSView相关基于ABAP技术栈的SAP产品的一些业务知识ABAPDevelopmen......
  • Python读取CSV文件进行数据可视化(源码)
     --------------------------------......
  • Win11系统提示找不到WaaSMedicSvc.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个WaaSMedicSvc.dll文件(挑选合适的版本文件)......
  • 10 本你应该阅读的 ABAP 书
    如果您正在寻找一本关于ABAP的好书,来看本文吧!探索新知识和提高编码技术的方法之一就是向高手学习。ABAP也在与时俱进。因此,围绕ABAP进行调整并扩展自己的知识(例如,SAPHANA或ABAPObjects及其他可能的接口),始终是保持相关性和知识性的好方法。因此,不分先后,我们回顾......
  • Kettle--csv文件(多图告警)
    1.组件2.原名称3.配置信息3.13.23.33.43.53.63.73.83.94.效果图5数据:2020年1月联考成绩(密码:d6h1)ps:这里提供搜索......
  • C# CsvExport
    1.Install-PackageCsvExport2.usingCsv;usingSystem.Runtime.InteropServices;namespaceConsoleApp8{internalclassProgram{[DllImport("user32.dll",CharSet=CharSet.Unicode)]staticexternintMessageBox(IntPt......
  • ABAP delet 内表小记
    *只有当记录的年份(zyear)不在s_year数组中,*并且月份(zmonat)也不在s_monat数组中时,才会删除这条记录。*换句话说,只有同时满足这两个条件的记录才会被删除。  DELETE gt_item WHERE zyear  NOT IN s_year[]                   AND zmonat NOT IN ......
  • 如何使用 ABAP 代码调度一个 ABAP 程序,让其以后台作业的方式运行
    文章目录1.ZLAUNCH的运行效果2.FORM子例程`run_in_background`2.1定义数据变量2.2检查是否为前台模式2.3提取选择屏幕参数2.4打开后台作业2.5检查作业创建成功与否2.6调度被调用的报表2.7关闭后台作业2.8根据执行结果输出信息2.9终止程序......
  • 【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空
    项目场景:TCODE:自开发程序ZMMF004采购申请打印问题描述ZMMF004打印的时候,有的采购申请的品名、规格、品牌为空原因分析:1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌SQL语句如下,只需修改where条件即可测试各条数据eban底表:采购申请......
  • 【YashanDB知识库】exp导出csv报错YAS-00218 string conversion failed
    【问题分类】数据导入导出【关键字】YAS-00218stringconversionfailed【问题描述】使用exp导出成csv报错YAS-00218stringconversionfailed【问题原因分析】首先使用showparametercharacter查看数据库服务端字符集,发现服务端字符集为GBK然后在文件$YASDB_HOME/client/......