点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好!
经过非常深入的搜索,我到达了墙,无法再进一步移动:(
我知道有关如何初始化DOI的编码过程。 然后,如何为模板中的链接添加映射,如何在RAW数据中加载模板并使用更改后的值打开文档。 但是..
问题:如何准备这样的WORD文档模板? 文档非常复杂,我已经有了局部语言,但是没有变量(SAP OLE链接,SAP Demo模板的MS WORD附带的屏幕)。 因此,最好的选择是在特定位置输入局部语言,然后上传模板并将其另存为ITAB到SAP DB表中的RAW。
SAP演示模板:此处
如果有人要寻找有关如何使用RAW模板的过程,请在其中更改变量并在此处打开doc(缩短版本):
FORM doi_initialize 使用p_cust_cont_name 将po_control类型参考更改为i_oi_container_control po_document类型参考i_oi_document_proxy po_link_server类型参考i_oi_link_server po_gui_cust_container类型参考cl_gui_custom_container。 数据:l_retcode类型soi_ret_string。 创建对象po_gui_cust_container 出口 container_name = p_cust_cont_name。 调用方法c_oi_container_control_creator => get_container_control 输入 控制= po_control retcode = l_retcode。 调用方法po_control-> init_control 出口 r3_application_name ='文件导出'(010) inplace_enabled ='X' 父母= po_gui_cust_container 输入 retcode = l_retcode。 调用方法po_control-> get_document_proxy 出口 document_type = soi_doctype_word_document"'Word.Document' document_format = soi_docformat_compound"'OLE' 输入 document_proxy = po_document retcode = l_retcode。 调用方法po_control-> get_link_server 输入 link_server = po_link_server retcode = l_retcode。 调用方法po_link_server-> start_link_server [...] ENDFORM。 " DOI_INITIALIZE FORM export_values2word 使用p_blart po_link_server类型参考i_oi_link_server ps_flds_value类型zfm_res_add_data_mswordole_trg。 数据:l_retcode类型soi_ret_string。 ************** WORD中的变量1 呼叫方法po_link_server-> add_string_item 出口 item_name ='Z_var1' item_value = lv_char"一些char值 输入 retcode = l_retcode ENDFORM。 " WRITE_TEXT_TO_DB 表格doi_open_document 使用ps_all_data_hdr TYPE zfm_res_add_data_msword2_src po_document类型参考i_oi_document_proxy。 数据:l_docsize TYPE i。 数据:ls_raw TYPE raw255。 数据:raw255的lt_raw类型标准表。 数据:ls_doc_tmpl类型为zfm_add_doc_tmpl。 数据:zfm_add_doc_tmpl的lt_doc_tmpl类型标准表。 数据:l_template_versi(2)类型c。 数据:l_retcode类型soi_ret_string。 " [....]从数据库读取模板的RAW到lt_raw和l_docsize 呼叫方法po_document-> open_document_from_table 出口 document_size = l_docsize document_table = lt_raw no_flush ='' open_inplace ='X' 输入 retcode = l_retcode。 ENDFORM。
(10.8 kB)
因此,您缺少如何使用I_OI_WORD_PROCESSOR_DOCUMENT接口的方法。 如果将"占位符"文本(PH1,PH2,PH3或其他内容)放置在Word模板文档中所需的任何位置,则可以简单地使用REPLACE方法(SAP库中的文档)。 这是您缺少的代码+替换+检索最终文档:
正如我所说,可以避免"闪光"。 我认为Link Server在您的情况下是可选的:如果要将值存储在剪贴板中,则可以使用cl_gui_frontend_services => clipboard_export(和文档代理界面的paste_clipboard)。 我对换行的问题感到非常惊讶,希望我有时间可以做一些测试。
对于其他解决方案:您只能将DOCX与CL_ABAP_ZIP一起使用。 DOCX只是具有特殊文件结构的ZIP。 其中之一包含文本,您可以用自己的文本替换占位符。 或者,您可以使用旧格式XML2003。
通过事务OAOR,您可以在BDS中加载Office文档(或任何文件)。 您可以使用CL_BDS_DOCUMENT_SET类以编程方式读取BDS文件,然后知道如何在DOI中加载它。
您不想使用DOI,而不必使用自定义XML部件以DOCX格式实现文档。 它已在SCN(类CL_DOCX_DOCUMENT)和Web(Microsoft Office中的自定义XML部件)中进行了讨论。 由于您已经在DOI上做了一些工作,因此可能会更长一些,但这是一种较新的技术(生成速度更快,并且可以在后台运行)。
非常感谢您的支持 回复!
我知道使用OAOR上传模板。 问题是我不知道如何在上传之前准备文档,因此如何添加连接到SAP OLE Link的变量,如所附的屏幕截图所示。
使用XML的想法当然可能是最好的选择,我在研究过程中发现了这个概念,但是在客户端的服务器上没有这样的类,也没有整个OpenXML类:(
嗨Michal,
"问题是我不知道如何在上传之前准备文档,因此如何添加连接到SAP OLE Link的变量,如所附的屏幕截图所示。"
您找到任何答案了吗?
嗨
很久以前,我还不确定。 但是我发现了一些代码。 基本上,您需要创建没有任何SAP OLE链接的模板,并在内部表中准备映射。 然后使用程序将其打开。 在调试器中,您需要指出位置并继续粘贴链接。 可能有更好的方法,但这就是我的处理方式。
粘贴链接的示例代码。
我关于此主题的所有注释(代码)均为此处:)
一周热门 更多>