具有2个使用XML的工作表的Excel工作表-大尺寸

2020-09-08 20:22发布

         点击此处--->   EasySAP.com群内免费提供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。
  • 以下更改/选项已尝试减小邮件大小:
  1. 删除数据单元格的格式->这样可以减小大小,但不会显着。
  2. 使用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。




有关如何减小邮件大小的任何指示都将有所帮助。



谢谢。

         点击此处--->   EasySAP.com群内免费提供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。
  • 以下更改/选项已尝试减小邮件大小:
  1. 删除数据单元格的格式->这样可以减小大小,但不会显着。
  2. 使用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。




有关如何减小邮件大小的任何指示都将有所帮助。



谢谢。

付费偷看设置
发送
4条回答
路亽曱_Ryan
1楼-- · 2020-09-08 21:05

大家好,

我能够通过在发送文件之前压缩文件来达到要求。

  • 在L_XML_TABLE中接收的XML数据的类型为x。 将其转换为xstring类型。
  • 使用类CL_ABAP-ZIP方法添加和保存以压缩xstring数据。
  • 使用SCMS_XSTRING_TO_BINARY将xstring转换为二进制。
  • 使用CL_BCS_SEND发送二进制内容。

压缩率达到97-99%。 (58 MB文件在zip文件中减少为671 KB)。

此致。

太Q了
2楼-- · 2020-09-08 21:12

嗨,Priyaranjan,

我有相同的要求,您能帮我解决这段代码吗?

此致

Rajeshwari

jovirus
3楼-- · 2020-09-08 20:59

嗨,Priyaranjan,

您可以使用以下方法创建Excel。

示例:

CONCATENATE'Field Header1'

'Field Header2'

'Field Header3'

INTO lv_string由%_horizo​​ntal_tab分隔。

循环 lt_tab进入ls_tab。

连接lv_string%_cr_lf

ls_tab-field1%_horizo​​ntal_tab

ls_tab-field2%_horizo​​ntal_tab

ls_tab-field3% _horizo​​ntal_tab

插入lv_string,按空格分隔。

endloop。

调用功能'SCMS_STRING_TO_XSTRING'

导出

文本= lv_string

导入

缓冲区= lv_xstring。

请询问是否需要任何帮助/说明。

谢谢

>

vidyasagar

nice_wp
4楼-- · 2020-09-08 21:01

您好Vidyasagar,

感谢您的回复。 但是,在我的情况下,将字段串联为1个字符串将不起作用,因为用户希望这些数据在单独的字段中能够使用过滤器/排序功能。

致谢。

一周热门 更多>