[openpyxl]Python에서 Excel 파일의 데이터 처리

10537 단어 파이썬ExcelOpenpyxl

소개



Excel 파일에 입력 된 데이터를 추출하고 다양한 처리해야했기 때문에 Python에서 Excel 파일을 조작 할 수있는 모듈 openpyxl 사용법에 대한 간단한 메모

준비 등


  • 운영 환경
  • Python 3.6.1
  • openpyxl 3.0.5


  • 일반적으로 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)
    
    田村 奈央
    
    Sheet1A2 셀에 입력 된 田村 奈央 값이 출력되었습니다.

    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,
    

    성별 출력에 주목해 보세요.

    값이 있는 사람과 없는 사람이 있음을 알 수 있습니다.
    이것은 결합 셀의 좌상 부분 이외의 좌표에는 내부적으로 값이 존재하지 않는 것에 의한 현상입니다.

    결합 셀을 포함한 시트를 처리할 때는 충분히 조심하십시오
    가장 좋은 것은 결합 셀을 사용하지 않는 것입니다.

    링크 등


  • openpyxl : 공식 문서

  • 무슨 개인 정보
  • 이 기사에서 사용한 데이터는 이 사이트에서 자동 생성되었습니다

  • 좋은 웹페이지 즐겨찾기