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

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

假设我们有一个表示Excel电子表格的二维矩阵。我们必须找到具有所有单元格和公式计算的相同矩阵。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

  • 否则返回solve(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)]

      • 返回do(aRes,bRes,op)

    • 否则,

      • 返回solve(getIdx(s))
  • 对于矩阵的行数范围从0到行数,执行以下操作
    • 对于矩阵的列数范围从0到列数,执行以下操作
      • matrix [i,j]:=(solve(i,j))作为字符串
  • 返回matrix

让我们查看以下实现,以便更好地理解:

更多Python相关文章,请阅读:Python 教程

示例

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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程