반응형

openpyxl 11

[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] 자신이 가진 엑셀 파일의 실질적인 행, 열 수를 알고 싶다면?

일단 load_workbook()으로 파일을 연 다음에, ws.max_row, ws.max_column 갖고 해주면 됩니다. wb=openpyxl.load_workbook("1서울/개표상황(투표구별)_강남구갑.xlsx") ws=wb.worksheets[0] print(f"max_row is in row {ws.max_row} and max_column is in column {ws.max_column}") max_row is in row 68 and max_column is in column 57 최대 행은 68, 최대 열은 57이라고 나오네요.

[openpyxl] loop 만들기

엑셀 각 셀 별로 loop를 만들어보도록 하겠습니다. 우선 각 셀의 coordinate를 한 번 만들어볼까요? 가장 기본적인 루프 형식은 숫자를 직접 지정해주는 겁니다. wb=Workbook() ws=wb["Sheet"] for row in range (1, 4): for col in range (1, 4): cell=ws.cell(row=row, column=col) print(cell.coordinate, end="!") print() 이렇게 하면 아래와 같이 각 셀의 좌표들이 나오게 됩니다. A1!B1!C1! A2!B2!C2! A3!B3!C3! 여기서 매우 중요한 것은 마지막은 range에 포함되지 않는다는 것. 다시 말해 4열과 4행은 들어가지 않습니다! 만약에 행열을 바꿔주면 다음과 같이 나오겠..

[openpyxl] 엑셀 칼럼 (알파벳)이 몇 번째 칼럼인지 알고 싶다면?

엑셀은 칼럼을 번호를 쓰는 게 아니라 알파벳으로 쓰죠? 그래서 때론 칼럼 인덱스를 원하는 경우가 있는데요. 이 때는 get_column_letter나 column_index_from_string 함수를 쓰면 됩니다. 이건 뭐 굳이 엑셀 파일을 불러오거나 할 것도 없구요. 함수 불러온다음에 엑셀에서 200번째 칼럼의 알파벳은 엑셀로 뭐냐? from openpyxl.utils.cell import get_column_letter get_column_letter(200) 이러면 GR인 것을 알 수 있습니다. 반대로 엑셀 칼럼 알파벳이 AAA면 이게 도대체 몇 번째 칼럼인거야라고 묻는다면 from openpyxl.utils.cell import column_index_from_string column_index..

카테고리 없음 2020.05.27
반응형