2020-09-09 16:50发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我正在开发一个报告,其中我会向同一用户发送多封带有附件的电子邮件。
我的问题是某些excel附件可以正确打开而没有任何错误,而其他excel附件在下面遇到错误。
请帮助我。 任何帮助将不胜感激。
谢谢。
此致
Katherine Darunday
此问题已解决。
在用于建立excel文件的内部表中,存在通配符,因此excel文件已损坏。
使用功能模块删除通配符,我解决了我的问题。
谢谢大家。
也许可以共享您的代码来创建excel,这是让人们知道发生了什么事情的理想选择...
嗨,
尝试以下代码
数据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 => horizontal_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。
嗨奎恩·杜安,
我已在下面附加了我的代码以创建excel文件。
我看到您的代码使用XML,所以我猜它是Excel 2003的XML。如果很小的Excel文件也有bug,可以共享吗? 请? (如果需要,可以将其匿名+压缩)
我正在使用该代码发送电子邮件。
方法send_email。 数据: lt_body TYPE bcsy_text, lv_subject TYPE so_obj_des, lv_filename TYPE so_obj_des。 明确: lt_body [], lv_subject, lv_filename。 *- 发电子邮件 环聊s_email INTO DATA(ls_email)。 尝试。 * –创建持久发送请求 go_send_request = cl_bcs => create_persistent()。 * –创建并设置带有附件的文档 *使用文本从内部表创建文档对象 如果sy-subrc EQ 0。 go_pgrp_mrp-> build_email_body( 输入 ex_t_text = lt_body)。 合并sy-datum + 4(2)c_slash sy-datum + 6(2)c_斜杠 sy-datum + 0(4)放入数据(lv_date)。 CONCATENATE text-005 lv_date gv_system INTO lv_subject 按空格分隔。 合并sy-datum + 4(2)c_period sy-datum + 6(2)c_period sy-datum + 0(4)插入数据(lv_date_2)。 CONCATENATE文字006 lv_date_2 INTO lv_文件名 按空格分隔。 自由: lv_date, lv_date_2。 万一。 go_document = cl_document_bcs => create_document( i_type = c_obj_tp_htm i_text = lt_body i_subject = lv_subject)。 * –将电子表格作为附件添加到文档对象 go_document-> add_attachment( i_attachment_type = c_file_ext i_attachment_subject = lv_filename i_attachment_size = gv_size i_att_content_hex = gs_binary_content)。 * –添加文档对象以发送请求 go_send_request-> set_document(go_document)。 * –添加收件人(电子邮件地址) *创建收件人对象 gv_mailto = ls_email-low。 go_recipient = cl_cam_address_bcs => create_internet_address(gv_mailto)。 * –添加收件人对象以发送请求 go_send_request-> add_recipient(go_recipient)。 * –设置立即发送标志 go_send_request-> set_send_immediately(abap_true)。 * –发送文件 gv_sent_to_all = go_send_request-> send(i_with_error_screen = abap_true)。 提交工作。 如果gv_sent_to_all是INITIAL。 使用gv_mailto发送i500(sbcoms)消息。 其他。 MESSAGE text-014 TYPE c_success。 万一。 *- 异常处理 捕捉cx_bcs INTO go_bcs_exception。 使用go_bcs_exception-> error_type的消息i865(so)。 ENDTRY。 明确: ls_email。 结局。 自由: lt_body [], lv_subject, lv_filename。 终结法。 "发电子邮件
最多设置5个标签!
此问题已解决。
在用于建立excel文件的内部表中,存在通配符,因此excel文件已损坏。
使用功能模块删除通配符,我解决了我的问题。
谢谢大家。
也许可以共享您的代码来创建excel,这是让人们知道发生了什么事情的理想选择...
嗨,
尝试以下代码
嗨奎恩·杜安,
我已在下面附加了我的代码以创建excel文件。
谢谢。
我看到您的代码使用XML,所以我猜它是Excel 2003的XML。如果很小的Excel文件也有bug,可以共享吗? 请? (如果需要,可以将其匿名+压缩)
嗨,
我正在使用该代码发送电子邮件。
一周热门 更多>