반응형

Python/PYTHON OpenPyXL (python and excel) 14

[openpyxl] 행이나 열 전체를 복사해서 이동

앞에서는 그리고 복사할 때는 그냥 value 옵션을 이용해서 하면 된다고 했는데, 행이나 열 전체를 옮길 때는 조금 살짝 복잡할 수 있습니다. 우선 1행 전체를 다 옮겨서 10줄 아래로 옮긴다고 가정하면, 일단 전체 rows를 지정해줘야 합니다. rows=ws.iter_rows(min_row=0, max_row=0) 그리고 각 row를 읽어주고 그 row에 있는 cell value 값을 다시 읽어주고 옮겨주면 됩니다. for row in rows: for cell in row: cell_new=ws.cell(row=15, column=cell.col_idx, value=cell.value) 여기서 cell.col_inx는 칼럼 배열 숫자를 얘기합니다. cell이 쓰는 칼럼 넘버. 종종 쓰세요. 유용합니다..

[openpyxl] 특정 셀을 복사해서 붙여 넣을 때

이 때는 ws.cell을 이용해서 old, new variable을 만들어줘서 해주면 됩니다. 예를 들어 1행 1열에 있는 값을 복사해서 11행 5열로 옮긴다고 하면 우선 기존 1행 1열 값을 적어주고 이걸 기존의 새로운 값으로 넣어준다고 하면 됩니다. old_cell=ws.cell(1, 1) new_cell=ws.cell(11, 5, value=old_cell.value) 여기서 조심해야 할 게 .value입니다. value option에 old_cell.value라고 하는 거 잊지 마시구요. 마찬가지로 1행 2열을 특정 장소로 옮긴다고 하면 old_cell=ws.cell(1, 2) new_cell=ws.cell(12, 5, value=old_cell.value) 결과는 다음과 같습니다.

[openpyxl] 특정 셀을 옮길 때

이번에는 특정열이나 행이 아니라 특정 셀을 옮기려고 해봅시다. 이 때는 _move_cell()이라는 명령어를 씁니다. _move_cell(기존 셀의 행, 기존 셀의 열, 행을 얼마나 옮길지, 열을 얼마나 옮길지) 예를 들어 ws._move_cell(1, 1, 10, 0) 이렇게 적으로면 A1에 있는 셀을 10열 내려서 옮겨라가 되겠지요? 앞의 move_range와는 다르게 move_cell에서는 앞에 _가 있는 거 잊지 마시기 바랍니다. ws1._move_cell(1, 1, 10, 0)

[openpyxl]특정 행, 열 등을 이동 할 때

밑에 설명에 이어서 특정 행, 특정 열 등을 옮기고 싶다고 하면, move.range() 을 이용하면 됩니다. 예를 들어, ws를 sheet으로 설정해놓고 특정 열(A1부터 J10까지)을 10열 밑으로 이동시켜라 하면, ws1.move_range("A1:A10", rows=10, cols=0) (자꾸 명령어에 row's', col's' 끝에 s를 두는 걸 까먹네요.. 헷갈리지 마시길). 결과는 다음과 같이 나옵니다.

[openpyxl] 새로운 행, 열을 더하고 삭제하는 법 #2:

우선 sheet를 하나 만들어봅니다. from openpyxl import Workbook wb=Workbook() ws1=wb["Sheet"] 오늘 쓸 명령어는 insert_rows, delete_rows, insert_cols, delete_cols입니다. 이름에서 어떤 기능이 있는지 금방 아실 겁니다. 여기서 조심해야 할 것은 맨 처음 행은 0으로 표시하되, 열은 1로 시작한다는 것입니다. 예를 들어 빈 한 줄을 더해라 하면, ws.insert_rows(0) 맨 처음 줄이 아니라 그 다음 줄에 한 줄을 더해라 하면, ws.insert_rows(1) 그런데 열은 1부터 시작하니까 만약에 빈 열을 첫번째 칼럼으로 더 해라 하면, ws.insert_cols(1) 1행에서 5행까지 일괄적으로 없애라 하면 ..

[openpyxl] sheet 이름 파악하기, 필요없는 sheet 지우기

어떤 엑셀 파일을 과도하게 많은 sheet를 갖고 있어서 이름조차 파악하기 어려울 때가 있습니다. sheet 수가 적더라도 이름이 길어서 정확한 제목을 쉽게 파악하지 못하는 경우도 있구요. 이럴 경우를 위해서 만들어진 함수가 있습니다. 제가 만든 임의의 파일을 열고 여기에 있는 sheet의 이름을 파악하면 다음과 같이 나오네요. wb_new=openpyxl.load_workbook("example.xlsx") wb_new.get_sheet_names() ['uhaha', 'kpop', 'jpop', 'kdrama', 'jdrama'] 이 중에서 맨 처음 sheet가 필요없어서 지우려면 다음과 같이. del wb_new['uhaha'] 다시 sheet 이름을 파악하면 첫번째 sheet가 사라진 것을 알 수..

[openpyxl] 여러 엑셀 파일을 하나의 파일 안에 정리해서 넣기

openpyxl을 사용하는 가장 큰 이유 중 하나가 수십, 수백, 수천 개의 엑셀 파일을 하나의 엑셀 파일로 정리해서 놓기 위함일 겁니다. 물론 아주 완벽한 형태로는 못할지라고 하더라도 말이죠. 오늘은 그간 배운 명령 몇 개를 갖고 간단하게 정리하는 법을 해볼까 합니다. 좋은 예가 선관위 자료인 것 같아요. 2020년 총선 자료를 보면 각 지역구(예를 들어 강남구 갑)마다 여당과 야당이 얼마나 많은 득표를 했냐는 건 알 수 있는데 문제는 선관위가 개별적인 엑셀 파일을 만들어서 전체 지역 (예를 들어 서울)을 보기 어려움이 있다는 데 있습니다. 그래서 이 자료들을 한 폴더에 넣고 그 파일의 핵심 내용만을 추출해서 엑셀 파일 하나로 만들어보는 작업을 해보겠습니다. 일단 라이브러리 데려오고 아래처럼 루프를 만..

[openpyxl] 새로운 행, 열을 더하고 삭제하는 법 #1:append

우선 파일을 하나 만들구요. filename = "Append.xlsx" wb = Workbook() ws1 = wb["Sheet"] 열을 더하려면 그냥 ws1.append( [..., ..., ...,] ) 형태로 만드시면 됩니다. 여기에 열 제목을 붙여볼까요? ws1.append( ["Sales", 2018, 2019] ) 그 다음에 여기에 맞는 내용을 추가한다고 하면 우선 리스트를 만들고 sales_data = [ ["North", 670_000, 230_000], ["South", 340_000, 550_000], ["West", 111_000, 95_000], ["East", 456_000, 123_000] ] 룹을 걸어서 더해주면 됩니다. for row in sales_data: ws1.app..

[openpyxl]  excel 파일 저장하기 전에 파이썬 콘솔에서 결과 미리 프린트해서 보는 법

내용이 방대하면 추천하는 방법은 아닙니디만, 몇 개의 셀 정도만 있고 openpyxl로 내용이 변경되거나 추가된 내용을 아나콘다나 주피터 등에서 바로 확인하려면 함수를 만들어서 하는 게 편합니다. 저도 외부에서 가져온 방법이긴 합니다만 다음과 같이 함수를 정의하고 출력해주면 좋습니다. def print_rows(ws): row_string = "" for row in ws.iter_rows(min_row=1, max_col=ws.max_column, max_row=ws.max_row): for cell in row: row_string += "{:

[openpyxl] 각 엑셀 행과 열에 새로운 값을 입력할 경우

아주 단순한 작업으로, 1부터 100까지의 숫자를 각 행과 열 순서대로 한다고 하면 다음과 같이 하면 됩니다. 우선 새로운 엑셀 파일을 만들고 여기에 ws.iter_rows를 통해 순차적으로 wb=openpyxl.Workbook() ws=wb["Sheet"] counter = 1 for row in ws.iter_rows(min_row=1, max_col=10, max_row=10): for cell in row: cell.value = counter counter += 1 그러면 아래와 같이 나옵니다. 칼럼 순서대로 하려고 하면 ws.iter_rows를 대신 쓰면 되겠지요. 여기서는 새로운 sheet(ws2)를 만들어서 더해봅니다. ws2=wb.create_sheet("New") counter = 1 ..

반응형