点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我需要在后台模式下发送包含2张纸的Excel文件作为附件。
我已经使用IXML和ixml_stream_factory类将数据转换为XML,并根据需要创建了2张工作表。
正在使用SO_NEW_DOCUMENT_ATT_SEND_API1发送邮件。 但是,电子邮件附件的大小为30MB,因为Excel文件的类型为XML DATA(* .xml)。
- 当我在MS Excel中打开文件并保存为.XLS/.XLSX时->相同文件的大小约为3 -4 MB。
- 以下更改/选项已尝试减小邮件大小:
- 删除数据单元格的格式->这样可以减小大小,但不会显着。
- 使用CL_ABAP_ZIP => compress_binary将L_XML_TABLE中的XML数据转换为二进制。 这提供了乱码的数据。可能我没有以正确的方式进行此压缩。
以下是发送邮件的代码:
*-创建流工厂
l_streamfactory = l_ixml-> create_stream_factory()。
*-将内部XML表连接到Stream Factory
l_ostream = l_streamfactory-> create_ostream_itable(table = l_xml_table)。
*-呈现文档
l_renderer = l_ixml-> create_renderer(ostream = l_ostream document = l_document)。
l_rc = l_renderer-> render()。
*-保存XML文档
l_xml_size = l_ostream-> get_num_writing_raw()。
ls_doc_chng-obj_descr =文本-060。
*-创建文档附件
*-L_XML_TABLE是RAW格式的转换后的XML数据。
*-类型:xml_line的开始,
*-data(255)TYPE x,
*-xml_line的结尾。
在l_xml_table INTO wa_xml中循环。
清除ls_objbin。
ls_objbin-line = wa_xml数据。
附加ls_objbin至lt_objbin。
ENDLOOP。
描述表lt_objbin LINES tab_lines。
ls_objhead-line = text-060。
附加ls_objhead到lt_objhead。
*-电子邮件附件的包装清单
ls_objpack-transf_bin ='X'。
ls_objpack-head_start = 1。
ls_objpack-head_num = 0。
ls_objpack-body_start = 1。
ls_objpack-body_num = tab_lines。
ls_objpack-doc_type ='XLS'。
ls_objpack-doc_size = tab_lines * 255。
附加ls_objpack到lt_objpack。
*-目标收件人
lv_email = gv_high。
清除ls_reclist。
ls_reclist-receiver = lv_email。
ls_reclist-rec_type ='U'。
ls_reclist-express ='X'。
附加ls_reclist到lt_reclist。
*-发送文档
通话功能'SO_NEW_DOCUMENT_ATT_SEND_API1'
导出
document_data = ls_doc_chng
put_in_outbox ='X'
commit_work ='X'
表格
包装清单= lt_objpack
object_header = lt_objhead
contents_txt = lt_objtxt
contents_hex = lt_objbin
接收者= lt_reclist
例外情况
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
其他= 99。
有关如何减小邮件大小的任何指示都将有所帮助。
谢谢。
大家好,
我能够通过在发送文件之前压缩文件来达到要求。
压缩率达到97-99%。 (58 MB文件在zip文件中减少为671 KB)。
此致。
嗨,Priyaranjan,
我有相同的要求,您能帮我解决这段代码吗?
此致
Rajeshwari
嗨,Priyaranjan,
您可以使用以下方法创建Excel。
示例:
CONCATENATE'Field Header1'
'Field Header2'
'Field Header3'
INTO lv_string由%_horizontal_tab分隔。
循环 lt_tab进入ls_tab。
连接lv_string%_cr_lf
ls_tab-field1%_horizontal_tab
ls_tab-field2%_horizontal_tab
ls_tab-field3% _horizontal_tab
插入lv_string,按空格分隔。
endloop。
调用功能'SCMS_STRING_TO_XSTRING'
导出
文本= lv_string
导入
缓冲区= lv_xstring。
请询问是否需要任何帮助/说明。
谢谢
>vidyasagar
您好Vidyasagar,
感谢您的回复。 但是,在我的情况下,将字段串联为1个字符串将不起作用,因为用户希望这些数据在单独的字段中能够使用过滤器/排序功能。
致谢。
一周热门 更多>