问题点
在导入 Excel 数据到 SAP 的时候,某些时刻系统会出现如下的弹窗。
- 上载 excel 文件时,您会收到错误:“剪贴板上有大量信息。XXX”
Microsoft Office Excel 的弹出窗口显示以下信息:
剪贴板上存在大量信息。是否保留其内容,以便此后粘贴到其他程序中?
- 要将其保存到剪贴板以便稍后粘贴,请单击“是”按钮。
- 要从剪贴板中删除并释放内存,请单击“否”。
- 用于上载 excel 文件的功能模块为 “
ALSM_EXCEL_TO_INTERNAL_TABLE
”。
英文错误为:There is a large amount of the information on the clipboard. Do you want to be able to paste this information into another program later?
- To save it on the Clipboard so that you can paste it later , click YES
- To delete it from Clipboard and free memory, Click,NO.
主要原因是 SAP 的函数模块:ALSM_EXCEL_TO_INTERNAL_TABLE
,这个函数模块在上传记录高于 9999 时,就会报这个错误。
解决方案
您想要在 SAP 中上载 excel 数据,并从 Microsoft Office Excel 获取剪贴板信息弹出窗口。弹出窗口是 Microsoft Excel 的一项功能。
官方的解决方法如下:
- 如果不再需要剪贴板,可以按“否”删除剪贴板。
- 关于功能模块 ALSM_EXCEL_TO_INTERNAL_TABLE,请仔细阅读附加的 SAP Note 933420,其中说明了该功能模块未释放供客户使用。
- 文本文件的解决方法:可以使用 GUI_UPLOAD。
- 联系您当地的 SAP 顾问,讨论您的业务应用场景和可能的解决方案
在实际测试中,可以通过以下方案进行逐个尝试:
方法一:使用注册表
ActiveClipboard (ACB): Office 的一项功能,允许存储先前的副本,以便以后粘贴不同的先前副本。通常只有在向用户显示剪贴板任务窗格时,该功能才可用。您可以通过禁用自动收集来禁用导致问题最多的功能。
使用注册表禁用自动收集功能:
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Common\General
(REG_DWORD): AcbControl
VALUE: (enter as hexadecimal) 80000000
注意:在设置 AcbControl 之前,必须关闭所有 Office 应用程序(包括 Outlook 等),任务管理器中没有正在运行的实例。否则,当这些应用程序关闭时,它们会将密钥写回到这些应用程序启动时的状态。
方法二:关闭 Excel 剪贴板收集功能
方法三:通过调试功能去执行
在调用这个函数模块的后面打个断点,然后按 F8 执行,也能成功读取 Excel 数据:
方法四:更改代码,遇到读取为空,重复读取
"Clear Clipboard
DO 10 TIMES.
CLEAR excel_tab.
cl_gui_frontend_services=>clipboard_export(
IMPORTING data = excel_tab
CHANGING rc = ld_rc ) .
CLEAR excel_tab.
cl_gui_frontend_services=>clipboard_import(
IMPORTING data = excel_tab ). "read clipboard
IF excel_tab IS INITIAL.
EXIT .
ENDIF.
WAIT UP TO 1 SECONDS.
ENDDO.
方法五:ABAP2XLSX 开源项目
这里不多过于介绍,后面会有一篇专门的文章。
参考链接:
- 2905085 - 使用 FM ALSM_EXCEL_TO_INTERNAL_TABLE 上载 excel 文件时出现剪贴板错误
- How to programmatically turn off the Clipboard warning message