【Python】Openpyxl로 쓴 값이 지수 표시(E)로 되었다

발생한 문제



Python 라이브러리 openpyxl에서 쓴 값이 E를 사용한 지수 표시의 표시 형식이되었습니다.

sample_code.py
import openpyxl

wb = openpyxl.open('./Book1.xlsx')
sh = wb['Sheet1']

sh.cell(row=1, column=1).value = 308985489249593041

wb.save('./result.xlsx')

결과

지수 함수를 제거한 표시로 해도 말미가 몇 개 0으로 옮겨져 곤란하다

원인



openpyxl 대신 Excel 사양 문제

Excel 셀에 15자리가 넘는 숫자를 입력하면 15자리를 넘는 숫자는 모두 0으로 변경됩니다.

Excel 셀에 긴 숫자를 입력하면 마지막 숫자가 0으로 변경됩니다.

수치 계산이라면 이 정도의 자릿수라면 약간 정도가 떨어지더라도 문제가되지 않을 것 같습니다.
뭔가 ID라든지 클레카의 번호라든지 1자리라도 다르면 곤란한 것을 쓰고 있는 경우는 곤란하네요

해결책



문자열로 숫자를 쓰는 것이 좋습니다.

sample_code.py
import openpyxl

wb = openpyxl.open('./Book1.xlsx')
sh = wb['Sheet1']

#ここで書き込む数値をstr型にしてあげる
sh.cell(row=1, column=1).value = str(308985489249593041)

wb.save('./result.xlsx')


이것은 문자열이나 아포스트로피로 시작하는 숫자이기 때문에 화가났지만 쓸 수있었습니다.
덧붙여서 Excel 내에서의 계산은 이 에러 나와도 정상적으로 실시할 수 있다

openpyxl에서 문자열로 작성된 값은 어떤 느낌으로 얻을 수 있습니까?



sample_code.py
import openpyxl

wb = openpyxl.open('./result.xlsx')
sh = wb['Sheet1']

A1_value = sh.cell(row=1, column=1).value
print(A1_value)
print(type(A1_value))

'''
> 308985489249593041
> <class 'str'>

문자열로 얻은 것 같습니다.
int로 다시 바꿔야합니다.

덧붙여 : 포맷을 지정해 준다



코멘트로 이하의 기사를 소개해 주셨습니다.
openpyxl로 숫자 표시 형식 지정

그래서sh.cell(row= , colum=).number_format =에 몇 가지 형식을 전달해 보았습니다.
쓰는 수치는 위와 같은 308985489249593041

A 열이 주어진 형식으로 B 열이 결과
오, 대단해. 제대로 포맷이 바뀌고 있네요.
하지만 유감스럽게도 역시 후미는 0으로 바꿀 수 있군요…
B2라든지 캐릭터 라인 포맷이지만 기입하는 시점에서 int형이라면 아마 무리같네요…

후기



더 까다로운 해결 방법이 있습니까?
Excel 플러그인으로 상한 해제 할 수 있다든가 w
알고 계시다면 알려주세요.

좋은 웹페이지 즐겨찾기