写在前面

  我们使用Python驱动SAP时,经常会需要导出一些SAP报表数据至本地Excel文件。这个看似简单的问题背后,其实暗藏玄机,今天小爬就带各位同学好好捋捋。

以事务代码FB03(凭证清单)为例,进入清单界面后,SAP会为我们加载默认布局,布局决定了我们报表中显示哪些字段,以什么样式来显示,最后我们导出的表格样式也大抵如此。

问题一:

  倘若默认布局不是我们当前想要的(每个用户的SAP界面针对特定事务代码,默认布局不尽相同,如果我们导出数据前不统一布局,后续导出的excel文件模板就没法统一,给后续的数据批量处理带来诸多不便),我们又不想修改默认布局,该怎么做呢?

回答一:

  我们可以先预设一个统一的全局布局,每次数据加载完后,我们的自动化脚本先设置布局至我们想要的,然后再执行数据的导出;

问题二:

  为啥SAP的布局在不同账号下呈现两种界面样式,该如何处理(示例界面:FAGLB03)?

回答二:

  我们可以点击【选择布局】后,判断弹窗的窗口标题,因为两种布局界面下的标题不一样。我们可以判断当前布局所属的样式,再决定是否自动点击SAP菜单栏的【设置】-【切换清单】。将布局样式一调整为样式二之后,再来进行后续的自动化操作。

问题三:

  为啥布局要先自动切换到【界面样式二】模式,该模式方便在哪儿?

回答三:

  我们通过之前系列【python驱动SAP完成自动化】文章中提到的Tracker工具,利用其Analyser功能,得到两者的布局界面(ID:/app/con[0]/ses[2]/wnd[1])的分布:

由于布局样式二的界面主体是GridView,它可以通过GetCellValue方法快速得到某个Cell(类似于单元格)的值,从而方便我们快速基于布局名称,定位并切换到想要的布局;与之对应,布局样式一的主体是GuiLabel对象,遍历每行布局相对没有那么方便。

不难看出,SAP的GUI自动化并不是一招鲜,吃遍天,真正实践时有太多的细节需要我们关注,希望看了这篇文章,你们可以少踩坑,快速积累实战经验!

快来扫码关注我的公众号 获取更多爬虫、数据分析的知识!

python驱动SAP完成数据导出(一)的更多相关文章

  1. python驱动SAP完成数据导出(二)

    在上一篇 python驱动SAP完成数据导出(一)中,我们提到了数据导出前,SAP布局的重要性,如何识别当前布局模式,以及如何切换到想要的布局.本篇小爬将着重讲讲数据导出的注意事项. 我们可以通过如下 ...

  2. Python 把数据库的数据导出到excel表

    import io,xlwt def export_excel(request): """导出数据到excel表""" list_obj = ...

  3. VBA驱动SAP GUI实现办公自动化(一)

    小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动 ...

  4. API例子:用Python驱动Firefox采集网页数据

    1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...

  5. python打造漏洞数据导出工具

    功能 [x] 支持导出的数据:IP地址.漏洞名称.风险等级.整改建议.漏洞描述.漏洞CVE编号.漏洞对应端口.漏洞对应协议.漏洞对应服务等. [x] 导出不同端口的同一个漏洞,也就是一个端口对应一个漏 ...

  6. python学习笔记3.2_数据导出

    一.data.to_csv:数据导出 1.to_csv:将数据导出为逗号分隔的文件 2.输出为其他分隔符的文件 写入到控制台,并打印:sys.stdout na_rep:对空值进行标注 二.serie ...

  7. Python结合SAP GUI Script操作sap的简易教程

    众所周知,如果要用Python做一些桌面WIN32应用的自动化工作,就需要用到著名的pywin32尤其是其中的win32com.client模块,pywin32的安装不能直接通过pip install ...

  8. hive的数据导入与数据导出:(本地,云hdfs,hbase),列分隔符的设置,以及hdfs上传给pig如何处理

    hive表的数据源有四种: hbase hdfs 本地 其他hive表 而hive表本身有两种: 内部表和外部表. 而hbase的数据在hive中,可以建立对应的外部表(参看hive和hbase整合) ...

  9. Python 进程之间共享数据

    最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享  在mp库当中,跨进程对象共享有三种方式,第一种 ...

随机推荐

  1. CSS伪类选择器实现三角形

    使用css实现常用的三角效果 项目中三角: .breadcrumb{ height: 40px; line-height: 40px; padding: 0 20px; border-top: 1px ...

  2. house of force----gyctf_2020_force!!

    做这道题前线学习一下house of force的用法 Linux下堆溢出利用2-House of force基本原理_haibiandaxia的博客-CSDN博客 老样子例行检查(这里我就不放了) ...

  3. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  4. Table.FillDown填充Table.Fill…(Power Query 之 M 语言)

    数据源: 任意列中包含空单元格 目标: 将空单元格填充为其上或其下单元格中的内容 操作过程: 选取指定列>[转换]>[填充]>[向下] 选取指定列>[转换]>[填充]&g ...

  5. CF1064A Make a triangle! 题解

    Content 有三条长度分别为 \(a,b,c\) 的线段.你可以在一个单位时间内将一条线段的长度增加 \(1\),试求出能使这三条线段组成一个三角形的最短时间. 数据范围:\(1\leqslant ...

  6. java 多线程:线程死锁,如何判断程序是否有死锁代码块儿

    线程死锁 死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去(百度百科). 代码示例: /** * @ClassName ...

  7. springboot使用线程池(ThreadPoolTaskExecutor)

    代码仓库:gitee 线程池创建 ` @Configuration @EnableAsync public class TaskPoolConfig { @Bean("syncExecuto ...

  8. More Effective C++ 基础议题(条款1-4)总结

    More Effective C++ 基础议题(条款1-4)总结 条款1:仔细区别pointers和references 如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表 ...

  9. byte数组(byte[])与MultipartFile相互转化

    MultipartFile转化为byte数组 byte[] bytes= file.getBytes(); byte数组转化为MultipartFile <dependency> < ...

  10. 使用JS对字符串进行MD5加密

    md5.js /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorith ...