使用FM SO_DOCUMENT_SEND_API1发送带有excel附件的邮件时,excel格式出现问题。

2020-08-25 09:18发布

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

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


您好,我正在使用FM SO_DOCUMENT_SEND_API1发送带有Excel附件的电子邮件。

我能够发送带有excel附件的邮件。

但是问题是当我尝试打开附件时弹出消息为''文件格式和'orders.xls'扩展名不匹配。 该文件可能已损坏或不安全。 除非您信任其来源,否则请不要打开它。 您是否仍要打开它?"

如果我在excel中单击"是"按钮,则可以查看自己的输出。

您能指导我为什么打开excel附件时显示弹出消息吗?

执行send_email表lt_message
                             it_attach
                             lt_receivers
                      使用"预算与实际"""主题
                            'XLS'
                            "预算与实际附加费用"""附加文件名
                            'INT'
                      更改gd_error。

 表格send_email表格pit_message
                         pit_attach
                         plt_receivers
                  使用p_mtitle
                         p_format
                         p_文件名
                         p_sender_addres_type
                  更改p_error。

   ld_mtitle = p_mtitle。
   ld_format = p_format。
   ld_attfilename = p_filename。
   ld_sender_address_type = p_sender_addres_type。

 *填写文档数据并获取附件大小
   清除:w_doc_data,w_cnt。
   描述表pit_attach线w_cnt。
   w_doc_data-doc_size =(w_cnt-1)* 255 + strlen(pit_attach)。

   w_doc_data-obj_langu = sy-langu。
   w_doc_data-obj_name ='SAPRPT'。
   w_doc_data-obj_descr = ld_mtitle。
   w_doc_data-sensitiveivty ='F'。

   清除t_attachment。
   刷新t_attachment。
   t_attachment [] = pit_attach []。

   清除w_t_packing_list。
   刷新t_packing_list。
   w_t_packing_list-transf_bin =空间。
   w_t_packing_list-head_start = 1。
   w_t_packing_list-head_num = 0。
   w_t_packing_list-body_start = 1。

   描述表pit_message LINEs w_t_packing_list-body_num。
   w_t_packing_list-doc_type ='RAW'。
   APPEND w_t_packing_list到t_packing_list。

   w_t_packing_list-transf_bin ='X'。
   w_t_packing_list-head_start = 1。
   w_t_packing_list-head_num = 1。
   w_t_packing_list-body_start = 1。
   描述表t_attachment线w_t_packing_list-body_num。

   w_t_packing_list-doc_type = ld_format。
   w_t_packing_list-obj_descr = sy-datum。" ld_attdescription。
   w_t_packing_list-obj_name = ld_attfilename。
   w_t_packing_list-doc_size = w_t_packing_list-body_num * 255。
   APPEND w_t_packing_list到t_packing_list。

   通话功能" SO_DOCUMENT_SEND_API1"
     出口
       document_data = w_doc_data
       put_in_outbox ='X'
       sender_address = ld_sender_address
       sender_address_type = ld_sender_address_type
       commit_work ='X'
     输入
       sent_to_all = w_sent_all
     桌子
       包装清单= t_包装清单
       object_header = objhead
       contents_bin = t_attachment
       contents_txt = pit_message
       接收者= plt_receivers
     例外情况
      too_many_receivers = 1
       document_not_sent = 2
       document_type_not_exist = 3
       operation_no_authorization = 4
       parameter_error = 5
       x_错误= 6
       enqueue_error = 7
       其他= 8。

   ld_error = sy-subrc。
 
error-in-xls-file.jpg (72.7 kB)

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

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


您好,我正在使用FM SO_DOCUMENT_SEND_API1发送带有Excel附件的电子邮件。

我能够发送带有excel附件的邮件。

但是问题是当我尝试打开附件时弹出消息为''文件格式和'orders.xls'扩展名不匹配。 该文件可能已损坏或不安全。 除非您信任其来源,否则请不要打开它。 您是否仍要打开它?"

如果我在excel中单击"是"按钮,则可以查看自己的输出。

您能指导我为什么打开excel附件时显示弹出消息吗?

执行send_email表lt_message
                             it_attach
                             lt_receivers
                      使用"预算与实际"""主题
                            'XLS'
                            "预算与实际附加费用"""附加文件名
                            'INT'
                      更改gd_error。

 表格send_email表格pit_message
                         pit_attach
                         plt_receivers
                  使用p_mtitle
                         p_format
                         p_文件名
                         p_sender_addres_type
                  更改p_error。

   ld_mtitle = p_mtitle。
   ld_format = p_format。
   ld_attfilename = p_filename。
   ld_sender_address_type = p_sender_addres_type。

 *填写文档数据并获取附件大小
   清除:w_doc_data,w_cnt。
   描述表pit_attach线w_cnt。
   w_doc_data-doc_size =(w_cnt-1)* 255 + strlen(pit_attach)。

   w_doc_data-obj_langu = sy-langu。
   w_doc_data-obj_name ='SAPRPT'。
   w_doc_data-obj_descr = ld_mtitle。
   w_doc_data-sensitiveivty ='F'。

   清除t_attachment。
   刷新t_attachment。
   t_attachment [] = pit_attach []。

   清除w_t_packing_list。
   刷新t_packing_list。
   w_t_packing_list-transf_bin =空间。
   w_t_packing_list-head_start = 1。
   w_t_packing_list-head_num = 0。
   w_t_packing_list-body_start = 1。

   描述表pit_message LINEs w_t_packing_list-body_num。
   w_t_packing_list-doc_type ='RAW'。
   APPEND w_t_packing_list到t_packing_list。

   w_t_packing_list-transf_bin ='X'。
   w_t_packing_list-head_start = 1。
   w_t_packing_list-head_num = 1。
   w_t_packing_list-body_start = 1。
   描述表t_attachment线w_t_packing_list-body_num。

   w_t_packing_list-doc_type = ld_format。
   w_t_packing_list-obj_descr = sy-datum。" ld_attdescription。
   w_t_packing_list-obj_name = ld_attfilename。
   w_t_packing_list-doc_size = w_t_packing_list-body_num * 255。
   APPEND w_t_packing_list到t_packing_list。

   通话功能" SO_DOCUMENT_SEND_API1"
     出口
       document_data = w_doc_data
       put_in_outbox ='X'
       sender_address = ld_sender_address
       sender_address_type = ld_sender_address_type
       commit_work ='X'
     输入
       sent_to_all = w_sent_all
     桌子
       包装清单= t_包装清单
       object_header = objhead
       contents_bin = t_attachment
       contents_txt = pit_message
       接收者= plt_receivers
     例外情况
      too_many_receivers = 1
       document_not_sent = 2
       document_type_not_exist = 3
       operation_no_authorization = 4
       parameter_error = 5
       x_错误= 6
       enqueue_error = 7
       其他= 8。

   ld_error = sy-subrc。
 
error-in-xls-file.jpg (72.7 kB)
付费偷看设置
发送
5条回答
clever101
1楼-- · 2020-08-25 09:58

您知道Excel支持多种格式吗?

  • " xls":Excel 97-2003,也称为二进制文件格式,只能使用OLE来创建它。 此扩展名也应使用XMLSS格式(见下文)
  • " csv":包含用逗号分隔的值的文本文件
  • " xlsx":自Excel 2007起,包含文件的压缩文件 主要以XML格式
  • " xml":Excel 2002/2003,XML文件,也称为XMLSS(XML电子表格)

现在,您应该更好地理解为什么使用Excel 发送以下消息以及纠正方法。

'orders.xls'的文件格式和扩展名不匹配。 该文件可能已损坏或
 不安全。 除非您信任其来源,否则请不要打开它。 是否仍要打开它?

如果要发送扩展名超过3个字符(xlsx)的附件,则应在功能模块SO_DOCUMENT_SEND_API1的参数OBJECT_HEADER中传输以下行(和 相应地,在参数PACKING_LIST中编辑HEAD_START和HEAD_NUM,以指示OBJECT_HEADER中的行在哪里):

&SO_FILENAME = yourfilename.xlsx 
SAP浪
2楼-- · 2020-08-25 09:51

嗨,

尝试将数据转换为十六进制表示以消除问题。

在FM SO_NEW_DOCUMENT_ATT_SEND_API中,将其传递到CONTENTS_HEX表参数而不是CONTENTS_BIN。

可能有效。

hengyuye
3楼-- · 2020-08-25 09:58

嗨,Sunil,

问题不是您的代码真正的问题,而是信任您的excel文件的设置。 每当您尝试从不受信任的位置打开excel文件时,该文件都会弹出。 您可以使用一些替代方法来摆脱此弹出窗口。 这是详细的答案:

https://social.technet.microsoft.com/Forums/office/zh-CN/4a15e472-a265-4058 -b439-7d79c2670817/xls-file-will-not-open-in-excel-2016-only-gray-view?forum = excel

通过更改excel的安全设置, 您可以摆脱此弹出窗口。

GK

土豆飞人
4楼-- · 2020-08-25 09:51

嗨,Sunil,

1。 更改文件扩展名以.xlsx或.xlsm

结尾

测试。

.xlsx或.xlsm文件重命名为.xls时可以生成消息

2。 将文件复制到更高级别的文件夹,查看是否解决错误。 Excel的文件路径限制为218个字符。 测试。

3。 添加受信任的位置:

a。 点击文件>选项

b。 单击"信任中心">"信任中心设置">"受信任的位置"

c。 点击添加新位置

d。 单击浏览查找文件夹,选择一个文件夹,然后单击确定。 测试。

参考

https://answers.microsoft.com/zh-CN/msoffice/forum/all/file-corrupted-or-un-safe-how-to-recoverfix/1b84b312-1434 -42b2-8b43-26313047e8c6

http ://office.microsoft.com/zh-CN/excel-help/repair-a-corrupted-workbook-HA102749554.aspx

https://answers.microsoft.com/zh-cn/msoffice/forum/all/the-file-format-and-extension-of-dont -match-excel/99538197-6a5f-4474-a967-630e44060688

clever101
5楼-- · 2020-08-25 10:06

嗨,我正在尝试生成xlsx或.xlsm来代替.xls,但它不会改变 扩展名。

 w_t_packing_list-transf_bin ='X'。
   w_t_packing_list-head_start = 1。
   w_t_packing_list-head_num = 1。
   w_t_packing_list-body_start = 1。
   描述表t_attachment线w_t_packing_list-body_num。
   w_t_packing_list-doc_type ='XLSX'。
   w_t_packing_list-obj_descr = sy-datum。" ld_attdescription。

   w_t_packing_list-obj_name = ld_attfilename。
   w_t_packing_list-doc_size = w_t_packing_list-body_num * 255。
   APPEND w_t_packing_list到t_packing_list。


   通话功能" SO_DOCUMENT_SEND_API1"
     出口
       document_data = w_doc_data
       put_in_outbox ='X'
       sender_address = ld_sender_address
       sender_address_type = ld_sender_address_type
       commit_work ='X'
     输入
       sent_to_all = w_sent_all
     桌子
       包装清单= t_包装清单
       object_header = objhead
       contents_bin = t_attachment
       contents_txt = pit_message
       接收者= plt_receivers
     例外情况

一周热门 更多>