是否可以在SAP中使用动态模板和数据创建Excel?

2020-08-16 14:44发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好民间! 我有一个要求,我想...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好民间!

我有一个要求,我想在其中创建一个报表,该报表可以创建Excel/电子表格以及SAP ABAP中Excel和数据的动态模板。 可以实现吗? 例如,我要在此处复制的Excel工作表就是相同的示例。 请指导我...

谢谢大家

Rajashree Palkar。

(99.3 kB)
5条回答
软件心理学工程师
2020-08-16 15:09 .采纳回答

您好 Rajashree Palkar

感谢您的澄清。

I 建议使用ABAP2XLSX库:

https://github.com/sapmentors/abap2xlsx

https://blogs.sap .com/2010/07/12/abap2xlsx-generate-your-professional-excel-spreadsheet-from-abap/-使用示例。

使用此方法,您可以创建结果电子表格 从头开始或填写上传到应用程序服务器的模板。

要存储模板,我建议使用CL_BDS_DOCUMENT_SET类:

  • 使用CREATE_WITH_FILES方法上传模板
  • 使用CREATE_VERSION_WITH_FILES方法更新模板
  • 使用GET_WITH_TABLE方法读取模板。

以下是示例:

方法upload_template。

     "当然,常量应该定义为类属性
     常数:
       lc_bds_comp_id TYPE bds_compid VALUE'EXCEL_TEMPLATE',
       lc_bds_classtype TYPE sbdst_classtype VALUE'OT',
       lc_bds_obj_key TYPE sbdst_object_key VALUE'EXCEL_TEMPLATE',
       lc_bds_classname类型sbdst_classname值'SOFFICEINTEGRATION'。

     数据:
       lv_rc TYPE i,
       lv_file TYPE rsawbnobjnm,
       lv_path TYPE rstxtlg,
       lv_filename TYPE字符串,
       lv_full_path TYPE rsfilenm,
       ls_files TYPE bapifiles,
       ls_object_key TYPE sbdst_object_key,
       lt_filetab TYPE文件表,
       lt_files TYPE sbdst_files,
       lt_signature TYPE sbdst_signature,
       lt_components TYPE sbdst_components。

     呼叫方法cl_gui_frontend_services => file_open_dialog
       出口
         file_filter ='MS Excel(* .xlsx)| * .xlsx |所有文件(*。*)| *。* |'
       改变
         file_table = lt_filetab
         rc = lv_rc
       例外情况
         file_open_dialog_failed = 1
         cntl_error = 2
         error_no_gui = 3
         not_supported_by_gui = 4
         其他= 5。
     检查lv_rc = 1和sy-subrc = 0。

     读取表lt_filetab索引1进入lv_filename。
     lv_full_path = lv_filename。
     通话功能'RSDS_SPLIT_PATH_TO_FILENAME'
       出口
         i_filepath = lv_full_path
       输入
         e_pathname = lv_path
         e_filename = lv_file。

     ls_files-doc_count = 1。
     ls_files-directory = lv_path。
     ls_files-文件名= lv_file。
     ls_files-comp_id = lc_bds_comp_id。
     ls_files-mimetype ='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'。
     将ls_files插入表lt_files中。

     "获取最新版本
     呼叫方法cl_bds_document_set => get_info_newest_only
       出口
         类别名称= lc_bds_classname
         classtype = lc_bds_classtype
         客户= sy-mandt
         object_key = lc_bds_obj_key
       改变
         组件= lt_components
         签名= lt_signature
       例外情况
         error_kpro = 1
         internal_error = 2
         nothing_found = 3
         not_allowed = 4
         not_authorized = 5
         parameter_error = 6
         其他= 7。

     读取表lt_signature参考到数据(ld_signature)索引1。
     如果sy-subrc = 0。
       "更新以前的版本
       调用方法cl_bds_document_set => create_version_with_files
         出口
           类别名称= lc_bds_classname
           classtype = lc_bds_classtype
           客户= sy-mandt
           object_key = lc_bds_obj_key
           doc_id = ld_signature-> doc_id
           doc_ver_no = ld_signature-> doc_ver_no
           doc_var_id = ld_signature-> doc_var_id
         改变
           文件= lt_files
         例外情况
           error_kpro = 1
           internal_error = 2
           nothing_found = 3
           not_authorized = 4
           not_allowed = 5
           parameter_error = 6
           其他= 7。
     其他。
       "上载新
       在lt_signature后面添加初始行,然后在ld_signature中添加引用行。
       ld_signature-> doc_count = ls_files-doc_count。
       ld_signature-> doc_id ='MY_DOCID'。
       ld_signature-> prop_name ='DESCRIPTION'。
       ld_signature-> prop_value ='我的Excel模板'。
       在lt_signature后面添加初始行,然后在ld_signature中添加引用行。
       ld_signature-> doc_count = ls_files-doc_count。
       ld_signature-> doc_id ='MY_DOCID'。
       ld_signature-> prop_name ='BDS_KEYWORD'。
       ld_signature-> prop_value ='EXCEL_TEMPLATE'。

       ls_object_key = lc_bds_obj_key。
       呼叫方法cl_bds_document_set => create_with_files
         出口
           类别名称= lc_bds_classname
           classtype = lc_bds_classtype
           客户= sy-mandt
         改变
           文件= lt_files
           object_key = ls_object_key
           签名= lt_signature
         例外情况
           internal_error = 1
           error_kpro = 2
           parameter_error = 3
           not_allowed = 4
           not_authorized = 5
           nothing_found = 6
           其他= 7。
     万一。
     如果sy-subrc <> 0。
       消息ID sy-msgid类型sy-msgty编号sy-msgno
         与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
       返回。
     万一。

     "并成功上传
     带有"模板"的消息s038(w3_tool)。
   终结法。

   方法get_excel_template。

     "当然,常量应该定义为类属性
     常数:
       lc_bds_comp_id TYPE bds_compid VALUE'EXCEL_TEMPLATE',
       lc_bds_classtype TYPE sbdst_classtype VALUE'OT',
       lc_bds_obj_key TYPE sbdst_object_key VALUE'EXCEL_TEMPLATE',
       lc_bds_classname类型sbdst_classname值'SOFFICEINTEGRATION'。

     数据:
       lv_raw TYPE xstring,
       lt_signature TYPE sbdst_signature,
       lt_components TYPE sbdst_components,
       lt_content TYPE sbdst_content。

     呼叫方法cl_bds_document_set => get_info_newest_only
       出口
         类别名称= lc_bds_classname
         classtype = lc_bds_classtype
         客户= sy-mandt
         object_key = lc_bds_obj_key
       改变
         组件= lt_components
         签名= lt_signature
       例外情况
         error_kpro = 1
         internal_error = 2
         nothing_found = 3
         not_allowed = 4
         not_authorized = 5
         parameter_error = 6
         其他= 7。
     检查sy-subrc = 0。

     提取文件
     呼叫方法cl_bds_document_set => get_with_table
       出口
         类别名称= lc_bds_classname
         classtype = lc_bds_classtype
         客户= sy-mandt
         object_key = lc_bds_obj_key
       改变
         含量= lt_含量
         签名= lt_signature
         组件= lt_components
       例外情况
         error_kpro = 1
         internal_error = 2
         nothing_found = 3
         no_content = 4
         parameter_error = 5
         not_authorized = 6
         not_allowed = 7
         其他= 8。

     转换
     将lt_content引用到数据(ld_file)中。
       将lv_raw ld_file-> line插入INTO lv_raw IN BYTE MODE。
     结局。

     rv_result = lv_raw。
   终结法。
 

亲切的问候,
Mateusz

一周热门 更多>