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 是數字,則將其作為整數返回
否則返回 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))
對於 i 從 0 到矩陣的行數範圍,執行以下操作
對於 j 從 0 到矩陣的列數範圍,執行以下操作
matrix[i, j] := (solve(i, j)) 作為字串
返回 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']]
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP