免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

SAP上传WPS文件报错排查:解决“文档中不包含数据”与“程序正在运行中”

SAP上传WPS文件报错排查:解决“文档中不包含数据”与“程序正在运行中” 月初给客户做物料需求汇总MD07的导入操作用户那边一上午连着三个电话都是同一个问题WPS做的Excel传到SAP里系统提示“文档中不包含数据”换个文件又提示“程序正在运行中”。这两条报错在SAP日常操作里实在太典型了尤其是国产办公软件WPS在终端大面积替代微软Office之后类似的问题出现频率明显上升。这篇就把我在实际处理中积累的排查思路和解决办法完整梳理一遍供遇到同样情况的顾问、IT运维和相关岗位的朋友参考。先说结论这两条提示虽然都是“文件上传失败”的表现但本质上是两条完全不同的故障链。“文档中不包含数据”基本可以锁定在文件格式和文件内容层面跟SAP本身的关系不大“程序正在运行中”则多半是本地进程冲突、SAP GUI卡死或系统锁表。把它俩当成一个问题去查越查越乱。下面按这两条线分别展开每一步我会把操作原因和判断逻辑也写出来方便你们带到现场直接套用。1. 先搞清楚两个报错的本质区别1.1 “文档中不包含数据”到底在说什么SAP前端上传Excel文件走的不是直观的“打开文件然后读内容”那么简单。无论是ALV GRID自带的“导入”功能还是各类报表程序调用的上传控件本质都是把用户本地的文件作为一个数据源通过SAP GUI内部的解析组件读取单元格值、行数、列数和数据类型再映射到ABAP内部表里。这里就出现了一个特别关键的环节SAP读取Excel文件依赖的是文件内部结构和注册表关联的组件。WPS做的Excel文件在多数情况下扩展名也是.xlsx或.xls看着跟微软Office做出来的一样但文件内部的meta信息、样式节点、文档属性往往有差异。如果用户在WPS里对文件做过再保存、转格式、从网页复制数据后另存文件可能已经不是一个“纯正的”Excel文件了。系统提示“文档中不包含数据”通俗点说就是SAP解析完这个文件后发现一个有效数据单元格都没有。我见过最离谱的一次用户把网页表格直接复制进WPS保存时选了“网页(*.htm)”格式然后把扩展名手工改成.xls再传到SAP里系统能读出一个单元格都没有。所以这个报错的实际含义不是“文件是空的”而是“SAP读不出任何有效数据”。1.2 “程序正在运行中”其实不是文件的问题“程序正在运行中”这个提示多数人会误以为是SAP自己程序卡了或者报错了但实际触发的场景通常是这样的用户点击了上传按钮之后SAP GUI需要在本机调用Excel/WPS的COM组件去解析文件或者需要访问正在被其他进程占用的文件。这时候SAP GUI的界面已经发出了一个等待指令但Excel/WPS组件没有及时返回界面左上角就出现了“程序正在运行中”的提示鼠标状态也可能变成忙碌。这个提示在某种意义上是SAP GUI的“假死通知”真正卡住的是前台本地组件而不是SAP后台。处理的关键是找出什么占了文件、什么占用了进程而不是在SAP端反复重试。另外如果用户之前上传任务没有正常结束对应的数据表被锁住、更新进程还挂着也可能导致下一次上传的时候直接回这个提示。2. 处理“文档中不包含数据”的完整步骤2.1 第一步检查文件后缀和真实格式不要上来就让用户重做先花两分钟检查文件。在Windows资源管理器里把“文件扩展名”显示打开具体方法是打开资源管理器点顶部菜单“查看”在“显示/隐藏”区域勾选“文件扩展名”。这时候能看到文件完整名称比如“库存数据.xlsx”或“库存报表.xls”。接下来用一个更硬核的办法验证文件到底是真Excel还是假Excel右键文件用记事本打开。注意这里不是让你去改内容只是用记事本看文件开头区域的字符。如果文件开头出现一串乱码二进制里能看到类似D0 CF 11 E0 A1 B1 1A E1的头部这是真正的旧版Excel文件OLE2复合文档格式。如果文件开头显示PK两个字符说明这是一个ZIP压缩包真正的xlsx新版Excel文件就是这种结构。如果文件开头直接是html、table、tr、td之类的标签这个文件十有八九就是网页伪装成ExcelSAP当然读不出数据。这是“文档中不包含数据”的第一大元凶。之所以用记事本是因为它可以读取文件二进制头部信息而且操作门槛低。让终端用户拿来检查他们也能轻松执行。2.2 第二步用WPS另存为标准Excel格式如果发现文件格式不对或者用户自己也说不清是怎么做的最稳妥的处理办法就是让用户打开WPS表格按F12或者点左上角“文件”→“另存为”在“保存类型”下拉框里选择“Excel 97-2003 工作簿(.xls)”或者“Microsoft Excel 工作簿(.xlsx)”重新保存到一个新的文件名再上传。这里要特意强调保存类型一定不能选“WPS表格(.et)”也不能选“网页(.htm)”。在WPS的另存为界面里“网页”类型的文字和图标都比较有迷惑性用户稍不留神就选错了。我在现场培训的时候反复跟用户说一句话“不要看保存类型列表里哪个名字长只看扩展名是不是xls或xlsx。只要不是这两个这个文件SAP就有可能不认。”另外还有一个细节如果用户的WPS里同时登录了云账号另存为时默认位置会弹到云盘目录。保存到云盘的文件有时下载回来之后格式属性也会变化。建议让用户直接保存到本地磁盘比如桌面或者“我的文档”再从那个位置上传能规避不少隐性坑。2.3 第三步检查表格内容和首行首列格式没问题还报“文档中不包含数据”的话问题就出在数据区域本身。SAP上传Excel通常默认读取第一个工作表并且要求数据从某个单元格开始绝大多数是从A1开始。但如果用户做的表格里前面几行是标题、说明文字、空行或者第一列是空列SAP扫描数据区域的时候会误判为“有效区域不存在”继而报“文档中不包含数据”。打开文件后先按CtrlHome看看光标是否跳到了A1单元格。如果发现前几行有“XX单位库存统计”、“填表人张三”之类的说明文字把这些行整体删除或者把数据区域剪切到A1开头。另外单元格里如果存在大量由公式生成的结果而用户只复制了公式没复制值SAP标准上传接口默认不计算公式只读取缓存值那么也会读出空数据。这种情况建议用户在WPS里先全选数据区域用“复制”→“选择性粘贴”→“只保留数值”的方式把公式结果固化成纯文本数据再保存上传。还有个小检查项工作表名字也不要太另类。少数后台程序和上传控件会按固定Sheet名去定位工作表如果用户把Sheet名改成了“数据汇总”还好改成了空字符或者带特殊符号的名称也会出现读取异常。最稳妥的做法是保持默认的Sheet1或者只保留一个工作表数据都放那一个里面。2.4 第四步处理WPS的锁文件和临时文件WPS在打开文档时会在同目录下生成一个临时的锁文件名字通常是~$开头和源文件类似比如~$库存数据.xlsx。这个文件平时默认是隐藏的但它是真实存在的。如果SAP在上传的时候WPS还在后台开着那个文件SAP前端组件尝试打开同一个文件时可能会被这个锁文件干扰表现出来就是读取不到有效数据偶尔也会触发“程序正在运行中”。处理办法是先把WPS表格完全关闭然后打开文件所在目录把隐藏的~$开头文件删除。如果看不到在资源管理器“查看”里勾选“隐藏的项目”就能看到了。删除之后再重新上传一次。如果文件所在目录里没有锁文件可以再看一下WPS的自动备份目录%AppData%\Kingsoft\WPS Office这个路径下经常有大量备份文件。如果用户是通过备份恢复得到的文件建议另存成全新的Excel文件再用避免备份文件带的一些内部标识导致SAP解析异常。2.5 补充SAP版本和前台导入组件对xlsx的支持新版的SAP GUI 7.60、7.70配合S/4HANA或者较新的ECC环境对xlsx的支持已经比较成熟直接上传基本没问题。但如果客户用的是ECC 6.0早期版本或者SAP GUI版本还在7.40以下那么对一些由WPS生成的xlsx文件解析失败的概率确实会上升。遇到这种情况最快的方法是让用户把文件另存为xlsExcel 97-2003格式再上传。xls格式是老牌格式SAP各版本的兼容性普遍较好。其次是看SAP GUI的版本和补丁让IT把SAP GUI升级到7.60以上同时打上最新的GUI补丁很多解析问题就消失了。从我这边观察到的数据看因为WPS特殊格式传入SAP导致读取失败的咨询占这个报错总数的六成以上剩下的才是流程操作上的问题比如文件没保存就上传、文件还在编辑中被占用。所以处理这类问题优先检查文件本身永远是排在最前面的。3. 处理“程序正在运行中”的排查路径3.1 第一步先别急着重试检查本机WPS残留进程用户遇到“程序正在运行中”时第一反应是“再点一次”这个操作不建议。反复点击不仅不会让SAP响应过来还可能在SAP GUI里堆积多个等待线程越搞越卡。正确做法是打开Windows任务管理器CtrlShiftEsc在“进程”或“详细信息”选项卡里找到所有带 WPS 字样的进程包括wps.exe、wpscloudsvr.exe、wpscenter.exe、wpspdf.exe等全部结束进程。尤其要留意wpscloudsvr.exe这个进程是WPS的后台云服务它会一直驻留内存并且可能占用文件句柄。结束之后再回到SAP GUI上传一次。这个方法适用于绝大多数“点了上传以后SAP GUI一直显示程序正在运行中”的场景。原因在于SAP GUI读取文件时需要获得文件的独占读权限如果WPS后台进程先占用了这个文件或者文件所在目录的句柄SAP就只能在那边无限等待。如果结束进程之后还是卡就把SAP GUI整个退出重新登录一次。这一步能清掉SAP GUI本地缓存和临时占用。3.2 第二步检查SM12锁对象和SM37后台作业有一种情况是上传操作确实已经进入SAP后台但因为某些原因没有正常结束比如批量输入会话BDC卡住了或者更新进程Update没有跑完导致数据表在这台终端用户对应的进程里被加了锁。这时候其他终端再上传同一个事务的数据SAP就会提示“程序正在运行中”或者类似的系统占用信息。排查方法很固定用事务码SM12查看当前系统中的锁对象。筛选条件填上用户ID、事务代码或者表名重点看有没有残留的E类型排他锁。如果发现锁条目是上个上传操作留下的且对应的更新请求已经不存在了可以选中这条锁记录直接删除。再用事务码SM37看一下后台作业列表确认有没有“Released”或“Active”状态的作业卡在那儿。特别是在月末、月初做数据导入高峰期用户经常会有意或无意地重复提交同一个上传作业上一个还没跑完下一个又开始了两个作业同时抢一张表的锁系统表现就是客户端一直“程序正在运行中”。如果判断作业是重复残留且无业务影响可以在SM37里把它取消掉再重新上传。3.3 第三步切换会话和GUI优化设置如果排查了进程和后台锁都没有问题那可以试着换一个SAP GUI会话窗口继续操作。在SAP GUI的菜单栏“会话”里打开一个新会话或者直接在命令框输入/o回车会弹出一个新会话列表从中选一个事务再进去。这个操作能绕开当前会话里可能存在的不可见阻塞状态。另外一个值得养成的习惯是在上传大文件之前先在SAP GUI命令框输入/i删除当前会话重新开一个新会话登录。这相当于一个“软化重启”很多本地组件和GUI界面的残留状态会被清理掉上传成功率会更高。如果SAP GUI经常在上传文件时卡顿可以在SAP GUI的“自定义”——“交互设计”里把“视觉设计”调成经典模式部分高分辨率缩放设置会拖慢本地文件对话框的响应速度。这个是锦上添花的做法遇到卡顿明显的时候效果还不错。3.4 常见的前台组件和关联引用冲突WPS安装后非常喜欢接管系统里所有Office相关文件的关联。也就是说双击.xlsx文件默认打开的是WPS而非微软Excel。SAP GUI在后台解析xlsx文件时也会读Windows注册表中.xlsx的关联配置。如果注册表里关联指向了WPS但SAP GUI调用的COM组件又是微软Excel的两者就会互相抢最终界面卡在“程序正在运行中”。这种关联冲突有时候很隐蔽因为用户本机可能既装了WPS又装了Office或者装过WPS后来又卸载了但注册表没有清理干净。解决办法是让IT在用户机器上重新指定文件关联或者在WPS的“配置工具”里选择“恢复默认关联设置”。如果公司允许也可以考虑把WPS的文件关联只限定在.et格式上把.xls、.xlsx的关联交还给微软Excel或使用SAP GUI的独立解析通道。这个做法能明显减少上传时的本地冲突但具体是否执行要看各公司的软件管理策略我不会强烈推荐只能说目前实测下来效果稳定。4. 案例复盘和避坑清单4.1 案例一MD07上传库存时提示文档中不包含数据客户那边月初要上传物料库存数据用的是WPS做好的“.xlsx”文件打开看内容完全正常几百行库存记录都在。但在MD07里选择本地文件上传后系统直接弹出“文档中不包含数据”。现场排查过程是这样的先按前面提到的方法用记事本打开该xlsx文件看到的是PK开头说明确实是标准的ZIP结构不是HTML伪装。再在WPS里按CtrlHome检查数据起点发现数据从第1行开始没问题。继续排查发现用户这个工作簿有3个工作表第一个工作表名字叫“目录”里面只有几行链接文字真正数据在第二个工作表里。SAP上传默认读第一个工作表所以读不到数据。让用户把第二个工作表移到第一个位置或者删除前面那个空白工作表保存后重新上传问题解决。这个案例说明类似报错的判断路径如果按部就班走很快就能定位到问题源。关键是不要一上来就怀疑系统或文件损坏从最简单的“SAP到底读了哪张表”出发。4.2 案例二导入过程假死提示程序正在运行中另一个客户是在用事务码FB50批量做凭证头数据导入的时候点了上传按钮SAP GUI界面上显示“程序正在运行中”鼠标变成沙漏等了十分钟也不动。我处理的步骤是打开任务管理器发现WPS表格的wps.exe进程确实存在而且那个待上传的Excel文件正被WPS打开着。结束WPS所有进程。回到SAP GUI发现界面恢复了上传操作自动继续执行最后正常导入成功。这是一个很典型的“文件被本地进程占用”导致SAP GUI等待的例子。如果当时没有查进程而是直接杀掉SAP GUI重启上传操作会丢失用户还得重新整理数据白白多耗时间。同时注意到公司这批PC都安装的是WPS且开启了WPS云同步wpscloudsvr.exe会常驻后台所以类似卡顿现象不是个例。后来给用户定的规范是上传SAP前先关掉WPS里打开的Excel文件再传。4.3 避坑清单按操作先后排列顺序操作项目的1显示文件扩展名确认是xls/xlsx排除ET、HTML伪Excel等格式问题2用记事本查看文件头判断文件是否为HTML伪装只看开头几个字符即可3在WPS中打开CtrlHome检查数据起始位置排除前几行空行、说明行导致的读取失败4检查工作表名和位置确保有效数据在第一个Sheet5清除WPS锁文件和备份文件防止文件被锁或读取到异常副本6关闭WPS进程后在任务管理器确认避免SAP GUI等待文件释放7上传前在SAP GUI命令框输入 /i 重新登录清理当前会话阻塞8仍报错时查SM12、SM37排查后台锁和重复作业这张清单我打印出来贴在客户IT办公桌前过他们现在遇到类似问题的解决效率明显高了不少至少能区分“是文件的事”还是“是系统的事”。5. 一些个人心得处理这类问题多了我有一个很深的感受SAP和WPS之间的兼容问题绝大多数都不是什么高深的技术难题而是细节性问题。文件格式、文件关联、进程占用、Sheet定位任何一个环节没对齐就会弹出系统提示把用户打懵。从我个人的角度看公司如果正处在Office向WPS切换的阶段IT部门值得做三件事一是给所有需要上传Excel到SAP的岗位统一下发一个固定模板文件模板里数据区域固定从A1开始Sheet名字固定二是在WPS里把云同步和后台驻留进程尽量关掉至少在上传操作时不要有WPS进程干扰三是把SAP GUI统一升级到较新版本这能减少很多隐藏的格式解析问题。这三件事做完相关报错至少能减少八成。最后分享一个小技巧在让用户重做文件之前可以先把出问题的文件用WPS打开随便在一个空白单元格里输入一个数字保存再重新上传试试。这个操作会触发WPS重写文件内部结构有时候就能把SAP无法识别的内部属性洗掉。这个方法不一定每次都灵但胜在操作简单值得一试。
返回列表