在Python中执行Excel电子表格操作的程序?

假设我们有一个2D矩阵代表一个Excel电子表格。我们必须找到所有计算出的单元格和公式都相同的矩阵。一个Excel电子表格如下所示

B170
35= A1 + A2

列名为(A,B,C ...),行名为(1、2、3 ...)。每个单元格将包含一个值,对另一个单元格的引用或用于操作的excel公式在数字或单元格参考之间。(例如,“ = A1 + 5”,“ = A2 + B2”或“ = 2 + 5”)

所以,如果输入像

B170
35= A1 + A2

那么输出将是

770
3510

因为B1 = 7(第一行第二列),并且“ = A1 + A2”是7 + 3 = 10。

为了解决这个问题,我们将按照以下步骤

  • 定义一个功能resolve()。这将花费

  • 如果s是数字,则将s作为整数返回

  • 否则返回solve(getIdx(s))

  • 定义一个功能getIdx()。这将花费

  • 返回一个列表,其中第一个值为s的子字符串,从1到结尾为整数,第二个值为s [0]的ASCII-“ A”的ASCII

  • 定义一个功能do()。这将需要a,b,op

  • 如果op与“ +”相同,则

    • 返回a + b

  • 如果op与“-”相同,则

    • 返回a-b

  • 如果op与“ *”相同,则

    • 返回a * b

  • 如果op与“ /”相同,则

    • 返回a / b

  • 定义一个功能solve()。这需要我,j

  • 如果matrix [i,j]是数字,则返回该值

  • 除此以外:

    • 返回solve(getIdx(s))

    • 对于s [从索引2到结尾]的子字符串中的每个c,执行

    • [a,b]:= s的子字符串[从索引1到结尾]并用op拆分

    • [aRes,bRes]:= [resolve(a),resolve(b)]

    • 返回do(aRes,bRes,op)

    • op:= c

    • 从循环中出来

    • 如果c是(+,-,/,*)中的任何运算符,则

    • s:= matrix [i,j]

    • 如果s [0]与“ =”相同,则

    • 除此以外,

    • 对于范围在0到矩阵行数的i,执行

      • matrix [i,j]:=(solve(i,j))作为字符串

      • 对于范围从0到矩阵的列数的j,执行

    • 返回矩阵

    让我们看下面的实现以更好地理解:

    示例

    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']]
    猜你喜欢