[openpyxl]Python에서 Excel 파일의 데이터 처리
소개
Excel 파일에 입력 된 데이터를 추출하고 다양한 처리해야했기 때문에 Python에서 Excel 파일을 조작 할 수있는 모듈
openpyxl
사용법에 대한 간단한 메모준비 등
일반적으로
pip
명령으로 설치pip install openpyxl
데이터 읽기/쓰기
이런 Excel 파일이 있다고 가정합니다.
우선 입력 된 셀에서 적절한 값을 검색합니다.
import openpyxl as ex
wb = ex.load_workbook("./data.xlsx") # Excelファイル選択
ws = wb["Sheet1"] # シート名選択
read_value = ws["A2"].value # セル座標選択、値を取得
print(read_value)
田村 奈央
Sheet1
의 A2
셀에 입력 된 田村 奈央
값이 출력되었습니다.5행째,
value = ws["A2"].value
의 곳을 value = ws["A2"]
로 하면값이 아니라
Cell
객체의 취득이 되므로, print문으로 표시시키고 싶을 때는 필드인 value
를 가져와 주세요다음은 쓰기를 시도합니다.
wb = ex.load_workbook("./data.xlsx") # Excelファイル選択
read_value = wb["Sheet1"]["A2"].value # シート、セル座標選択、値を取得
wb["Sheet2"]["B1"] = read_value # 書き込み
wb.save("./data.xlsx") # 保存
상반부는 조금 거의 동일
바로 시트 "Sheet2"를 준비하고 B1 셀에 씁니다.
마지막 줄,
save
메서드로 덮어 쓰기를 잊지 마세요.(이 부분의 처리가 없으면 Excel 파일에 반영되지 않습니다)
당연하지만 그 부분에 있던 입력값은 사라져 버립니다. 불안한 분은 별명으로 저장합시다.
행렬 번호로 셀 좌표 지정
주소에서의 셀 번지 지정(처음까지의 좌표 지정 방법)이라면, 루프 처리 등으로 취급하기 어려운 케이스가 나옵니다
그래서 행 번호와 열 번호로 좌표를 지정해 보겠습니다.
wb = ex.load_workbook("./data.xlsx")
ws = wb["Sheet1"]
read_value_01 = ws["A2"].value # セル番地指定
read_value_02 = ws.cell(2,1).value # 行列番号指定
print(read_value_01, read_value_02)
田村 奈央 田村 奈央
for
로 인덱스를 지정할 때 등은 이쪽이 취급하기 쉬운 생각이 듭니다나는 행과 열이 항상 엉망이되어 래퍼를 만들거나합니다.
행과 열 모두 인덱스는 「1」로부터의 시작이므로 주의
( "0"이하의 값을 지정하면 ERROR가 된다)
주의점
함수를 입력하는 셀 로드
이전과 같은 시트에서,
연령 열의 데이터를 읽어 보겠습니다.
wb = ex.load_workbook("./data.xlsx")
ws = wb["Sheet1"]
read_value = ws["E2"].value
print(read_value)
=DATEDIF(D2,$G$2,"Y")
표시된
38
값을 가져 오기를 원했지만 수식을 얻었습니다.따라서 함수로 값을 계산하는 셀의 경우
계산된 값이 아닌 입력된 함수를 로드합니다.
값 자체를 읽고 싶다면
load_workbook
메서드의 인수 data_only
값을 True
로 사용하여 Excel 파일을로드하십시오.wb = ex.load_workbook("./data.xlsx", data_only=True) # 表示されている値として取得
ws = wb["Sheet1"]
read_value = ws["E2"].value
print(read_value)
38
결합 셀 처리
Excel에는 셀 바인딩이라는 불쾌한 기능이 있습니다.
시트의 모양은 좋지만 결합 셀의 값은 왼쪽 상단 부분의 좌표에만 기록되므로 데이터로 처리하는 데 어려움이 있습니다.
구체적인 예를 보자.
위와 같은 시트에서 데이터를 인원수 출력하는 코드를 작성해 보겠습니다.
wb = ex.load_workbook("./data.xlsx", data_only=True)
ws = wb["Sheet1"]
for row in range(2, 19+1):
for colmun in range(1, 5+1):
print(ws.cell(row, colmun).value, end=", ")
print() # 改行
男, 安井 人志, やすい ひとし, 1960-01-30 00:00:00, 61,
None, 中山 寿明, なかやま としあき, 1999-12-04 00:00:00, 21,
None, 岩田 一徳, いわた いっとく, 1945-06-28 00:00:00, 75,
None, 重松 真一, しげまつ しんいち, 1960-12-13 00:00:00, 60,
None, 高山 雅彦, たかやま まさひこ, 1982-11-27 00:00:00, 38,
None, 相田 幸平, あいだ こうへい, 1967-04-09 00:00:00, 53,
None, 三原 丈史, みはら たけし, 1974-03-31 00:00:00, 46,
None, 中岡 将也, なかおか まさや, 1976-02-25 00:00:00, 44,
None, 徳永 明慶, とくなが あきよし, 1978-11-22 00:00:00, 42,
女, 及川 えみ, おいかわ えみ, 1980-05-31 00:00:00, 40,
None, 小野寺 淳子, おのでら あつこ, 1944-04-14 00:00:00, 76,
None, 布川 怜奈, ふかわ れいな, 1961-08-04 00:00:00, 59,
None, 瀬戸 かおり, せと かおり, 1950-03-12 00:00:00, 70,
None, 長崎 路子, ながさき みちこ, 1974-03-08 00:00:00, 46,
None, 滝 奈央, たき なお, 1954-02-09 00:00:00, 67,
None, 小野 あおい, おの あおい, 1974-04-14 00:00:00, 46,
None, 竹下 恵梨香, たけした えりか, 1988-05-28 00:00:00, 32,
None, 本村 紗季, ほんむら さき, 1955-05-30 00:00:00, 65,
성별 출력에 주목해 보세요.
값이 있는 사람과 없는 사람이 있음을 알 수 있습니다.
이것은 결합 셀의 좌상 부분 이외의 좌표에는 내부적으로 값이 존재하지 않는 것에 의한 현상입니다.
결합 셀을 포함한 시트를 처리할 때는 충분히 조심하십시오
가장 좋은 것은 결합 셀을 사용하지 않는 것입니다.
링크 등
무슨 개인 정보
Reference
이 문제에 관하여([openpyxl]Python에서 Excel 파일의 데이터 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mk1600/items/ce8bdca007e969de29ff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)