用 Python 执行 excel 电子表格操作的程序?
假设我们有一个代表 excel 电子表格的 2D 矩阵。我们必须找到相同的矩阵,其中计算了所有单元格和公式。excel 电子表格如下所示
| B1 | 7 | 0 |
| 3 | 5 | =A1+A2 |
列名为 (A、B、C...),行名为 (1、2、3....)。每个单元格要么包含一个值,要么包含对另一个单元格的引用,要么包含一个 excel 公式,用于数字或单元格引用之间的运算。 (例如:"=A1+5"、"=A2+B2"或"=2+5")
因此,如果输入如下
| B1 | 7 | 0 |
| 3 | 5 | =A1+A2 |
则输出将是
| 7 | 7 | 0 |
| 3 | 5 | 10 |
因为 B1 = 7(第一行第二列)并且"=A1 + A2"是 7 + 3 = 10。
为了解决这个问题,我们将遵循以下步骤
定义一个函数 resolve() 。这将需要 s
如果 s 是数字,则返回 s 作为整数
否则返回 resolve(getIdx(s))
定义一个函数 getIdx() 。这将需要 s
返回一个列表,其中第一个值是 s 的子字符串,从 1 到结尾为整数,第二个值 是 s[0] 的 ASCII - "A"的 ASCII
定义一个函数 do() 。这将需要 a、b、op
如果 op 与"+"相同,则
返回 a + b
如果 op 与"-"相同,则
返回 a - b
如果 op 与"*"相同,则
返回 a * b
如果 op 与"/"相同,则
返回 a / b
定义一个函数solve()。这将需要 i, j
如果 matrix[i,j] 是数字,则返回该值
否则:
s := matrix[i, j]
如果 s[0] 与 "=" 相同,则
对于 s[从索引 2 到末尾] 的子字符串中的每个 c,执行
如果 c 是 (+, -, /, *) 中的任何运算符,则
op := c
退出循环
[a, b] := s 的子字符串 [从索引 1 到末尾] 并用 op 拆分
[aRes, bRes] := [resolve(a) , resolve(b)]
return do(aRes, bRes, op)
否则,
return resolve(getIdx(s))
对于范围从 0 到矩阵行数的 i,执行
对于范围从 0 到矩阵列数的 j,执行
matrix[i, j] := (solve(i, j))作为字符串
return matrix
让我们看看以下实现以便更好地理解:
示例
class Solution:
def solve(self, matrix):
def resolve(s):
try:
return int(s)
except:
return solve(*getIdx(s))
def getIdx(s):
return [int(s[1:]) - 1, ord(s[0]) - ord("A")]
def do(a, b, op):
if op == "+":
return a + b
if op == "-":
return a - b
if op == "*":
return a * b
if op == "/":
return a / b
def solve(i, j):
try:
return int(matrix[i][j])
except:
s = matrix[i][j]
if s[0] == "=":
for c in s[2:]:
if c in "+-/*":
op = c
break
a, b = s[1:].split(op)
aRes, bRes = resolve(a), resolve(b)
return do(aRes, bRes, op)
else:
return solve(*getIdx(s))
for i in range(len(matrix)):
for j in range(len(matrix[0])):
matrix[i][j] = str(solve(i, j))
return matrix
ob = Solution()
matrix = [
["B1", "7", "0"],
["3", "5", "=A1+A2"]
]
print(ob.solve(matrix))
输入
[["B1", "7", "0"], ["3", "5", "=A1+A2"] ]
输出
[['7', '7', '0'], ['3', '5', '10']]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

