【Python × Excel】 책이나 시트를 넘어 여러 줄의 copipe를하는 방법

소개



Excel에서 통합 문서와 시트를 넘어서 여러 열의 데이터를 복사하고 싶을 때 없습니까?
이 기사에서는 Python을 사용하여 Excel에서이 작업을 수행하는 방법을 설명합니다.

이번에는 가상의 회사의 직원 데이터 .xlsx와 평가 데이터 .xlsx라는 두 개의 책을 예로 코드 작성 방법을 설명하겠습니다.

직원 데이터

평가 데이터


준비



먼저 필요한 라이브러리를 가져옵니다.
import os
import openpyxl as px

os는 현재 디렉토리 확인 및 변경과 같은 OS 기능을 Python에서 사용하기위한 라이브러리입니다. 아래에서 설명하는 것처럼 이번에는 사용하려는 Excel 파일이 있는 디렉터리로 이동하는 데 사용합니다.
openpyexcel은 Pyhton에서 Excel을 사용할 때 사용하는 라이브러리입니다. 이번에 국한되지 않고 Python에서 Excel을 조작 할 때는 항상 가져 오십시오.

통합 문서 및 워크시트 로드



필요한 라이브러리를 가져온 후 아래와 같이 사용할 통합 문서와 워크시트를 로드합니다.
#該当ファイルのあるディレクトリに異動
os.chdir('C:\\Users\\ユーザー名\\Documents\\Qiita用サンプル')


#社員データのワークブックとワークシートを読み込み
wb1 = px.load_workbook('社員データ.xlsx')
ws1 = wb1['基本情報']
ws2 = wb1['経歴']

#評価データのワークブックとワークシートの読み込み
wb2 = px.load_workbook('評価データ.xlsx')
ws3 = wb2['評価']

우선 os.chdir() 로 현재 디렉토리를 이동합니다. Users 이후에는 사람에 따라 경로가 다르다고 생각합니다만, 어쨌든 취급하고 싶은 Excel 파일이 있는 폴더의 경로를 넣어 주세요.

통합 문서는 px.load_workbook(파일 이름)으로 로드됩니다. 현재 디렉토리를 올바르게 이동할 수 있다면 절대 경로가 아닌 파일 이름만으로 읽을 수 있습니다.

그런 다음 ws1 = wb1 [시트 이름]이라는 느낌으로 워크 시트를로드합니다. 사원 데이터 .xlsx에는 시트가 2개 존재하기 때문에, 이번은 ws1, ws2라는 바람에 2회 읽고 있습니다.

통합 문서가 여러 개 있는 경우 위 코드와 같이 변수 이름을 바꾸고 같은 방식으로 px.load_workbook()로 로드합니다.

시트를 넘어서 지정된 열을 복사



그러면 드디어, 시트를 넘은 코피페를 해 갑니다.
이번에는 직원 데이터 북의 경력 시트의 "고등학교", "대학"컬럼을 복사합니다. 기본 정보 시트의 E열과 F열에 붙여넣고 싶습니다.

C, D 열을 끝까지 복사하여

기본 정보 시트의 E, F 열에 붙여 넣고 싶습니다.


우선 코드는 아래와 같이 됩니다.
def copy_paste1():
    for i in range(1, ws2.max_row + 1):
        highschool = ws2.cell(row = i, column = 3).value
        ws1.cell(row = i, column = 5, value = highschool)
        bachelor = ws2.cell(row = i, column = 4).value
        ws1.cell(row = i, column = 6, value = bachelor)
        i += 1
    wb1.save(filename = '社員データ.xlsx')

copy_paste1()

copipe를 하는 셀이 1개일 때는 for문은 필요 없습니다만, 이번과 같이 복수의 셀을 취급하는 경우는 for문의 루프 처리를 이용하면 간단합니다.
range의 시작은 복사하고 싶은 행을 지정합시다. 이번에는 헤더를 포함하여 복사하고 싶기 때문에 1을 지정하고 있습니다. 헤더를 제외하고 복사하고 싶다면 2를 지정합시다.
그리고 range의 종료치입니다만, max_row+1라고 쓰는 것으로 데이터가 들어가 있는 컬럼의 끝까지 루프를 실시할 수 있습니다. max_row는 데이터가 들어 있는 셀을 카운트해, 마지막행이 몇행째인가를 가르쳐 주는 메소드입니다.
덧붙여서 +1하는 것은 range()의 성질로 종료값을 카운트해주지 않기 때문입니다(예를 들어 Range(0,10)로 했을 경우는 카운트되는 것은 0~9까지군요?).

덧붙여서 마지막으로 i + = 1이라고 쓰고 있습니다만, Python의 성질상 이 기재가 없어도 마음대로 i가 1씩 가산되므로 본례는 불필요합니다. 본 코드에서는 외형을 알기 쉽게 하기 위해서 굳이 기재하고 있습니다.

올바르게 코드를 작성할 수 있다면 이렇게 될 것입니다.


import os
import openpyxl as px

#該当ファイルのあるディレクトリに異動
os.chdir('C:\\Users\\ユーザー名\\Documents\\Qiita用サンプル')

#社員データのワークブックとワークシートを読み込み
wb1 = px.load_workbook('社員データ.xlsx')
ws1 = wb1['基本情報']
ws2 = wb1['経歴']

#評価データのワークブックとワークシートの読み込み
wb2 = px.load_workbook('評価データ.xlsx')
ws3 = wb2['評価']

def copy_paste1():
    for i in range(1, ws2.max_row + 1):
        highschool = ws2.cell(row = i, column = 3).value
        ws1.cell(row = i, column = 5, value = highschool)
        bachelor = ws2.cell(row = i, column = 4).value
        ws1.cell(row = i, column = 6, value = bachelor)
        i += 1
    wb1.save(filename = '社員データ.xlsx')

copy_paste1()


 

좋은 웹페이지 즐겨찾기