影刀RPA:如何将WPS表格所有Sheet页原样导出到Excel表格

楔子
大家好,我是张桃狮。
最近我收到一份需要输入用户名和密码才能打开的WPS表格,每次打开都会有延迟。
我估计打开这个表格的时候,需要联网验证权限。
这个表格有几十个Sheet,我打算将这个表格批量读取出来,写入一个没有权限的Excel表格中。
首先使用获取Sheet页名称指令,将WPS表格所有Sheet页名称读取出来并保存为列表。
循环这个列表。
使用激活Sheet页指令,依次激活每个Sheet。
使用读取Excel内容指令,读取当前Sheet页数据。
插一句,这个读取Excel内容指令很神奇,可以变相破解WPS的复制限制。
使用打开/新建Excel指令,新建一个Excel文件。
注意这里要把Excel对象保存为另一个名字,不能跟之前的重复。
使用添加Sheet页指令,添加Sheet,添加方式选作为最后一个sheet页,这样可以保持插入Sheet的顺序与原表格相同。
最后是写入并保存,我就不赘述了。

闲话少说,咱们继续力扣刷题学编程。
力扣278. 第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
示例 1:
输入:n = 5, bad = 4
输出:4
解释:
调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。
示例 2:
输入:n = 1, bad = 1
输出:1
提示:
我的思路
暴力循环
# The isBadVersion API is already defined for you.# def isBadVersion(version: int) -> bool:class Solution: def firstBadVersion(self, n: int) -> int: for i in range(1,n): if not isBadVersion(n-i): return n-i+1 return 1
不出所料超时了。
既然没有报错,说明思路没有错,只不过需要优化。
时间复杂度O(n),空间复杂度O(1)。
二分法
# The isBadVersion API is already defined for you.# def isBadVersion(version: int) -> bool:class Solution: def firstBadVersion(self, n: int) -> int: i=1 j=n if isBadVersion(i): return i while j-i>1: if not isBadVersion((j-i)//2+i): i=(j-i)//2+i else: j=(j-i)//2+i return j
力扣提交通过,时间复杂度O(log n),空间复杂度O(1)。
力扣官方题解
方法一:二分查找
官方题解没有Python代码,我找豆包要了一份
class Solution: def firstBadVersion(self, n: int) -> int: left, right = 1, n # 标准二分查找模板 while left < right: mid = left + (right - left) // 2 # 防溢出写法 if isBadVersion(mid): right = mid # 坏版本,向左缩小范围 else: left = mid + 1 # 好版本,向右缩小范围 return left # 最终左右指针重合,即为第一个坏版本
思路跟我的差不多,不过代码简洁了很多。
力扣提交通过,时间复杂度O(log n),空间复杂度O(1)。
我是个编程爱好者,小白级别的,如果你跟我一样希望通过力扣刷题,学习各种奇妙的算法,可以关注我,大家一起学习。
夜雨聆风