电子邮件中的Excel附件已损坏

2020-09-09 16:50发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我正在开发一个报告,...

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

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


大家好,

我正在开发一个报告,其中我会向同一用户发送多封带有附件的电子邮件。

我的问题是某些excel附件可以正确打开而没有任何错误,而其他excel附件在下面遇到错误。

请帮助我。 任何帮助将不胜感激。

谢谢。

此致

Katherine Darunday

(9.6 kB)
6条回答
小c菟菟
2020-09-09 17:29

嗨,

尝试以下代码

数据lo_send_request类型参考cl_bcs。
   数据lv_date(10)。
   数据lv_text TYPE char255。 文字
   数据lv_subject TYPE so_obj_des。
   数据lo_document类型参考cl_document_bcs。
   数据lv_binary_content TYPE solix_tab。
   数据lv_size TYPE so_obj_len。
   DATA lv_string TYPE字符串。
   数据lt_main_text类型bcsy_text。
   数据lo_recipient类型参考if_recipient_bcs。
   数据lv_sent_to_all TYPE os_boolean。
   数据lo_bcs_exception类型参考cx_bcs。
   数据:lv_email TYPE ad_smtpadr,
         lv_lines类型i。


 *电子表格附件的分隔符
   CLASS:cl_abap_char_utilities定义加载。
   常量:gc_tab类型c值cl_bcs_convert => gc_tab,
            gc_crlf类型c值cl_bcs_convert => gc_crlf。




   数据:gv_tab类型c值cl_abap_char_utilities => horizo​​ntal_tab,
         gv_newline TYPE c VALUE cl_abap_char_utilities =>换行符,
         gv_line_feed类型c值cl_abap_char_utilities => cr_lf。


   将sy-datum写入lv_date DD/MM/YYYY。




   lv_lines = LINES(gt_up_file)。
   如果lv_lines GT 65000。
     讯息i000(zmm)与
     '报告有65,000多行。 电子邮件不能为'
     "已发送-报告只能显示。"
     "为了通过电子邮件发送报告"
     "请更改您的选择标准。"。
     出口。
   万一。


   循环至gt_up_file。


     CONCATENATE lv_string gt_up_file gc_crlf gv_newline
            INTO lv_string。


   结局。
 * -------------------------------------------------  -------------
 *将文本字符串转换为UTF-16LE二进制数据,包括
 *字节顺序标记。  Mircosoft Excel更喜欢这些设置
 *所有这些都是由新类cl_bcs_convert完成的(请参阅注释1151257)


   尝试。
       cl_bcs_convert => string_to_solix(
         出口
           iv_string = lv_string
           iv_codepage ='4103'"适用于MS Excel,请留空
           iv_add_bom ='X'"用于其他文档类型
         输入
           et_solix = lv_binary_content
           ev_size = lv_size)。
     捕捉cx_bcs。
       讯息e445(如此)。
   ENDTRY。


   尝试。


 * --------创建持久发送请求------------------------
       lo_send_request = cl_bcs => create_persistent()。


 * --------创建并设置带有附件的文档---------------
 *使用文本从内部表创建文档对象
       lv_text = lv_date。
       附加lv_text至lt_main_text。
       在lt_main_text后面添加初始行。


       lv_text ='附加了PO错误文件'。
       附加lv_text至lt_main_text。


       CONCATENATE'PO错误文件'''
                              INTO lv_subject。
       lo_document = cl_document_bcs => create_document(
         i_type ='RAW'
         i_text = lt_main_text
         i_subject = lv_subject)。


 *将电子表格作为附件添加到文档对象
       lo_document-> add_attachment(
       i_attachment_type ='XLS'
       i_attachment_subject = lv_subject
       i_attachment_size = lv_size
       i_att_content_hex = lv_binary_content)。


 *添加文档对象以发送请求
       lo_send_request-> set_document(lo_document)。


 * ---------添加收件人(电子邮件地址)-----------------------
 *创建收件人对象


       环回s_ercpt。
         lv_email = s_ercpt-low。


         lo_recipient = cl_cam_address_bcs => create_internet_address(
         lv_email)。
 *添加收件人对象以发送请求
         lo_send_request-> add_recipient(lo_recipient)。


       结局。
 * ----------发送文件-------------------------------------  -
       lv_sent_to_all = lo_send_request-> send(i_with_error_screen ='X')。


       提交工作。


       如果lv_sent_to_all是INITIAL。
         使用''的消息s500(sbcoms)。
       其他。
         讯息s022(so)。
       万一。


 *    -  -  -  -  -  -  异常处理  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
     捕获cx_bcs INTO lo_bcs_exception。
       使用lo_bcs_exception-> error_type的消息i865(so)。
   ENDTRY。
 

一周热门 更多>