乐于分享
好东西不私藏

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

影刀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)。

我是个编程爱好者,小白级别的,如果你跟我一样希望通过力扣刷题,学习各种奇妙的算法,可以关注我,大家一起学习。