Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 Excel 스프레드시트 작업을 수행하는 프로그램?

<시간/>

Excel 스프레드시트를 나타내는 2D 행렬이 있다고 가정합니다. 모든 셀과 수식이 계산된 동일한 행렬을 찾아야 합니다. 엑셀 스프레드시트는 아래와 같습니다.

B1 7 0
3 5 =A1+A2

열의 이름은 (A, B, C...)이고 행은 (1, 2, 3....)입니다. 각 셀에는 avalue, 다른 셀에 대한 참조 또는 다음 작업을 위한 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() 를 정의하십시오. 시간이 걸립니다

  • 첫 번째 값이 정수로 1부터 끝까지 s의 부분 문자열이고 두 번째 값이 s[0]의 ASCII - "A"의 ASCII인 목록을 반환합니다.

  • 함수 do() 를 정의합니다. 이것은, b, op

    가 걸립니다.
  • op가 "+"와 같으면

    • + b를 반환

  • op가 "-"와 같으면

    • 반환 - b

  • op가 "*"와 같으면

    • 반환 * b

  • op가 "/"와 같으면

    • / b를 반환

  • solve() 함수를 정의합니다. 이것은 i, j가 걸릴 것입니다

  • 행렬[i,j]가 숫자이면 해당 값을 반환합니다.

  • 그렇지 않으면:

    • s :=행렬[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) 반환

    • 그렇지 않으면

      • 해결 반환(getIdx(s))

  • 행렬의 행 수까지 범위 0에 있는 i에 대해

    • 행렬의 열 개수까지 범위 0의 j에 대해

      • matrix[i, j] :=(solve(i, j)) 문자열로

  • 반환 행렬

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

class 솔루션:def solve(self, matrix):def resolve(s):try:return int(s) 제외:return solve(*getIdx(s)) def getIdx(s):return [int(s[ 1:]) - 1, ord(s[0]) - ord("A")] def do(a, b, op):op =="+"인 경우:op =="-인 경우 a + b를 반환합니다. ":return a - b if op =="*":return a * b if op =="/":return a / b def solve(i, j):try:return int(matrix[i][j] ) 제외: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)):범위 내 j에 대해(len(matrix[0])):matrix[i][j] =str(solve(i, j)) return matrixob =솔루션() 행렬 =[ ["B1", "7", "0"], ["3", "5", "=A1+A2"]]print(ob.solve(matrix)) 

입력

[["B1", "7", "0"],["3", "5", "=A1+A2"] ]

출력

[['7', '7', '0'],['3', '5', '10']]