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