UI里面excel数据上传并解析的例子(CSV格式)
来源:互联网 发布:怎么配置linux ip 编辑:程序博客网 时间:2024/05/17 20:33
可以参考系统的例子 CRM_THTMLB_COMP/FileUploadTag 。
下面的是一个简单的CSV格式示例。
METHOD eh_onuploadfile. DATA lv_flag TYPE char1. DATA lv_value TYPE string .***实例化前台消息容器* -------------------------------------------------------------------* get BOL core (for message handling) DATA lr_bol_core TYPE REF TO cl_crm_bol_core. DATA lr_message_container_manager TYPE REF TO cl_crm_genil_mess_cont_manager. DATA lr_message_container TYPE REF TO cl_crm_genil_global_mess_cont.* get BOL core lr_bol_core = cl_crm_bol_core=>get_instance( ).* get current message container manager lr_message_container_manager = lr_bol_core->get_message_cont_manager( ).* get message container lr_message_container = lr_message_container_manager->get_global_message_cont( ).* ------------------------------------------------------------------- AUTHORITY-CHECK OBJECT 'ZXXXXXXX' ID 'ACTVT' FIELD '01'. IF sy-subrc <> 0."权限检查 CALL METHOD lr_message_container->add_message EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '001' iv_show_only_once = 'X'. EXIT. ENDIF.***实例化上传数据控件并使用* -------------------------------------------------------------------* get the file attributes and content DATA lr_file TYPE REF TO cl_thtmlb_fileupload. DATA lv_file_name LIKE lr_file->file_name. DATA lv_file_content LIKE lr_file->file_content. DATA lv_file_length LIKE lr_file->file_length. DATA lv_file_type LIKE lr_file->file_content_type. DATA lv_length TYPE i. lr_file ?= htmlb_event_ex. lv_file_name = lr_file->file_name. lv_file_content = lr_file->file_content. lv_file_length = lr_file->file_length.*lv_file_type = lr_file->file_content_type.*CHECK lv_file_type = 'application/vnd.ms-excel'.* get the last 4 bites of the file name lv_length = strlen( lv_file_name ). CHECK lv_length > 4. lv_length = lv_length - 4.* check the file type IF lv_file_name+lv_length(4) <> '.csv'. CALL METHOD lr_message_container->add_message "判断格式是不是csv EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '002' iv_show_only_once = 'X'. EXIT. ENDIF.***将二进制流转换为string DATA lr_converter TYPE REF TO cl_abap_conv_in_ce. DATA lv_filestring TYPE string . CALL METHOD cl_abap_conv_in_ce=>create EXPORTING encoding = 'NON-UNICODE' endian = 'L' replacement = '#' ignore_cerr = abap_true input = lv_file_content RECEIVING conv = lr_converter. lr_converter->read( IMPORTING data = lv_filestring ). DATA itab_data TYPE STANDARD TABLE OF string. DATA wa_itab_data TYPE string . DATA lin2 TYPE i. DATA ls_zxxxxxxx TYPE zxxxxxxx . DATA lt_zxxxxxxx TYPE TABLE OF zxxxxxxx.****将string切分成一行一条数据的内表 SPLIT lv_filestring AT cl_abap_char_utilities=>cr_lf INTO TABLE itab_data. DELETE itab_data INDEX 1. DESCRIBE TABLE itab_data LINES lin2 . IF lin2 = 0 ."数据异常 CALL METHOD lr_message_container->add_message EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '003' iv_show_only_once = 'X'. EXIT. ENDIF.***整理上传的数据到内表2 DATA lin3 TYPE i. DATA lv_tabix TYPE string. DATA itab_data2 TYPE STANDARD TABLE OF string. DATA wa_itab_data2 TYPE string . DATA lv_sa TYPE string . DATA lv_sb TYPE string . DATA lv_sc TYPE string . LOOP AT itab_data INTO wa_itab_data. lv_tabix = sy-tabix .***因为可能出现双引号中带逗号的数值形式,所以必须要去除这样的逗号和双引号 CLEAR:lv_sa,lv_sb,lv_sc. DO 10 TIMES . SPLIT wa_itab_data AT '"' INTO lv_sa lv_sb. IF lv_sb IS INITIAL . EXIT. ENDIF. SPLIT lv_sb AT '"' INTO lv_sc lv_sb. REPLACE ALL OCCURRENCES OF ',' IN lv_sc WITH ''. CONCATENATE lv_sa lv_sc lv_sb INTO wa_itab_data . ENDDO. REFRESH itab_data2. SPLIT wa_itab_data AT ',' INTO TABLE itab_data2. DESCRIBE TABLE itab_data2 LINES lin3 . IF lin3 <> 99."列数改变了 每行的列数应该是固定值和内表结构一一对应 CALL METHOD lr_message_container->add_message EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '004' iv_show_only_once = 'X' iv_msg_v1 = lv_tabix iv_msg_v2 = '列数不是99'. EXIT. ENDIF. CLEAR ls_zxxxxxxx. CLEAR wa_itab_data2. READ TABLE itab_data2 INDEX 1 INTO wa_itab_data2. IF wa_itab_data2 IS INITIAL. CALL METHOD lr_message_container->add_message EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '005' iv_show_only_once = 'X' iv_msg_v1 = lv_tabix iv_msg_v2 = '第一列值为空'. EXIT. ELSE. ls_zxxxxxxx-col1 = wa_itab_data2. ENDIF. CLEAR wa_itab_data2. READ TABLE itab_data2 INDEX 88 INTO wa_itab_data2. TRY . ls_zxxxxxxx-col88 = wa_itab_data2. CATCH cx_root. CALL METHOD lr_message_container->add_message EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '006' iv_show_only_once = 'X' iv_msg_v1 = lv_tabix iv_msg_v2 = '列【88】填入的不是正确的数值类型'. EXIT. ENDTRY. CLEAR wa_itab_data2. READ TABLE itab_data2 INDEX 99 INTO wa_itab_data2. IF wa_itab_data2 IS NOT INITIAL."日期可能用户没填 防止报错 CALL FUNCTION 'CONVERT_DATE_INPUT' "#EC NOTEXT EXPORTING input = wa_itab_data2 plausibility_check = 'X' IMPORTING output = ls_zxxxxxxx-col99 EXCEPTIONS plausibility_check_failed = 1 wrong_format_in_input = 2 OTHERS = 3. IF sy-subrc <> 0. CALL METHOD lr_message_container->add_message EXPORTING iv_msg_type = 'E' iv_msg_id = 'ZXXXXX' iv_msg_number = '007' iv_show_only_once = 'X' iv_msg_v1 = lv_tabix iv_msg_v2 = '列【99】填入的不是正确的日期类型,年月日以点分割,一年只有12个月,一个月最多31天,2月份也没有29号。'. EXIT. ENDIF. ENDIF. APPEND ls_zxxxxxxx TO lt_zxxxxxxx . ENDLOOP.ENDMETHOD.
0 0
- UI里面excel数据上传并解析的例子(CSV格式)
- UI里面excel数据上传并解析的例子(XML格式)
- 上传excel文件并将里面的数据放入数据库
- 利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据
- C# 上传excel文档解析出里面数据
- 项目里面的一个下载模板并上传例子
- Android将数据库数据导出成excel格式的文本(CSV)
- Excel上传并解析(java)
- 解析excel+结合表单上的数据生成csv文件
- android 将SQLite数据库的表格导出为csv格式,并解析csv文件
- 解析并打印Excel格式xml文档数据
- struts2上传excel文件并解析数据插入数据库
- 上传,解析Excel文件并保存数据到数据库
- asp.net中导出到Excel的方法汇总及导出Excel/Csv格式数据最优方案(C#)
- asp.net中导出到Excel的方法汇总及导出Excel/Csv格式数据最优方案(C#)
- 使用nodejs实现对浏览器上传excel并解析数据的实现
- Java解析Excel表格(支持xls和xlsx格式),并转换为Json数据
- 上传并解析excel文件
- TextUtils方法介绍
- 关于ES、PES、PS以及TS码流
- 《leetCode》: Implement Trie (Prefix Tree)
- sync命令的作用
- echarts3 柱状图实现
- UI里面excel数据上传并解析的例子(CSV格式)
- 最后还是json格式的问题
- TCP:传输控制协议
- android学习13#--Handler消息传递机制
- EditText焦点的问题。
- 前端面试小结
- 宏定义 #,##
- PopupWindow的使用
- 在hibernate中使用二级缓存的时候指定CacheConcurrencyStrategy.READ_WRITE修改后接着用for-each 或 iterator访问时报错ConcurrentMod