Python Excel 처리 라이브러리 openpyxl 상세 정보
pip install openpyxl
설치.penpyxl Excel 파일 읽기
관련 함수 가져오기 필요
from openpyxl import load_workbook
# , write_only read_only True
wb = load_workbook('pythontab.xlsx')
기본적으로 열려 있는 파일은 읽기 및 쓰기입니다. 필요한 경우 매개 변수read_ 를 지정할 수 있습니다.오직 True입니다.penpyxl 워크시트 가져오기 --Sheet
# sheet
print(wb.get_sheet_names())
# sheet sheet
a_sheet = wb.get_sheet_by_name('Sheet1')
# sheet
print(a_sheet.title)
# sheet, wb.get_active_sheet()
sheet = wb.active
penpyxl 셀 가져오기
# , excel ,
b4 = sheet['B4']
#
print(f'({b4.column}, {b4.row}) is {b4.value}') # int
# , cell , , B2
b4_too = sheet.cell(row=4, column=2)
print(b4_too.value)
b4.column 반환 B,b4.row는 4를 되돌려줍니다. value는 그 칸의 값입니다.또한cell에는 b4와 같은 속성coordinate가 하나 더 있습니다. 이 칸은 좌표 B4를 되돌려줍니다.penpyxl 최대 행과 최대 열 얻기
#
print(sheet.max_row)
print(sheet.max_column)
penpyxl 줄 및 열 가져오기
sheet.rows는 생성기입니다. 안에는 줄마다 데이터가 있고, 줄마다 또한tuple로 감싸져 있습니다.
sheet.columns는 유사하지만, 안에 있는tuple은 열마다 칸입니다.
# , A1, B1, C1
for row in sheet.rows:
for cell in row:
print(cell.value)
# A1, A2, A3
for column in sheet.columns:
for cell in column:
print(cell.value)
위의 코드는 모든 칸의 데이터를 얻을 수 있다.어떤 줄의 데이터를 얻으려면?색인을 주면 돼요. 왜냐하면sheet.rows는 생성기 형식으로 인덱스를 사용할 수 없습니다.list로 변환한 후에 인덱스를 사용합니다.list(sheet.rows)[2]이렇게 하면 두 번째 줄의tuple 대상을 얻을 수 있습니다.
for cell in list(sheet.rows)[2]:
print(cell.value)
penpyxl은 어떻게 임의의 구간의 칸을 얻을 수 있습니까?
range 함수, 아래의 쓰기를 사용하여 A1을 왼쪽 상단, B3를 오른쪽 하단 사각형 영역으로 하는 모든 칸을 얻을 수 있습니다.Openpyxl에서 Excel의 표현 방식과 일치하기 위해 프로그래밍 언어의 습관과 0으로 첫 번째 값을 표시하지 않기 때문에 range는 1부터 시작합니다.
for i in range(1, 4):
for j in range(1, 3):
print(sheet.cell(row=i, column=j))
# out
<Cell pythontab.A1>
<Cell pythontab.B1>
<Cell pythontab.A2>
<Cell pythontab.B2>
<Cell pythontab.A3>
<Cell pythontab.B3>
슬라이스를 사용하는 것처럼 사용할 수도 있다.sheet['A1':'B3']는tuple을 되돌려줍니다. 이 모듈 내부는 모듈입니다. 줄마다 모듈로 구성되어 있습니다.
for row_cell in sheet['A1':'B3']:
for cell in row_cell:
print(cell)
for cell in sheet['A1':'B3']:
print(cell)
# out
(<Cell pythontab.A1>, <Cell pythontab.B1>)
(<Cell pythontab.A2>, <Cell pythontab.B2>)
(<Cell pythontab.A3>, <Cell pythontab.B3>)
알파벳에 따라 열 번호를 얻고 열 번호에 따라 알파벳을 되돌려준다이 두 함수는openpyxl에 존재합니다.utils
from openpyxl.utils import get_column_letter, column_index_from_string
# 열의 숫자에 따라 문자 반환
print(get_column_letter(2)) # B
# 문자에 따라 열의 숫자를 반환합니다.
print(column_index_from_string('D')) # 4
Excel에 데이터 쓰기
워크시트 관련
WorkBook 가져오기 필요
from openpyxl import Workbook
wb = Workbook()
이렇게 해서 새 작업표를 새로 만들었다.쓰기 전용 모드를 지정하려면 매개 변수 write_only=True.일반적인 쓰기 가능 읽기 가능 모드로 하면 됩니다.
print(wb.get_sheet_names()) # Sheet ,office2016 Sheet1
#
sheet.title = 'Sheet1'
# , ,
wb.create_sheet('Data', index=1) # ,index=0
#
wb.remove(sheet)
del wb[sheet]
penpyxl 셀 쓰기
공식도 사용할 수 있어요.
#
sheet['A1'] = 'good'
# B9
sheet['B9'] = '=AVERAGE(B2:B8)'
그런데 읽을 때 데이터를 넣어야 돼요.only=True 이렇게 B9을 읽으면 숫자가 반환됩니다. 이 인자를 넣지 않으면 공식 자체'AVERAGE(B2:B8)'가 반환됩니다.append 함수
한 번에 여러 줄의 데이터를 추가할 수 있습니다. 첫 줄의 공백 줄부터 (아래는 모두 공백 줄) 쓸 수 있습니다.
#
row = [1 ,2, 3, 4, 5]
sheet.append(row)
#
rows = [
['Number', 'data1', 'data2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
append 함수는 줄로만 쓸 수 있기 때문입니다.만약 우리가 열에 따라 쓰고 싶다면?append는 수요를 실현할 수 있습니까?위의 목록을 끼워 넣으면 행렬로 간주됩니다.행렬만 돌리면 돼요.zip () 함수를 사용하면 실현할 수 있지만 내부의 목록은 원조로 바뀌면 됩니다.모두 교체 가능한 대상이므로 영향을 주지 않는다.
list(zip(*rows))
# out
[('Number', 2, 3, 4, 5, 6, 7),
('data1', 40, 40, 50, 30, 25, 50),
('data2', 30, 25, 30, 10, 5, 10)]
위의 list(zip(*rows)를 설명하자면 먼저 *rows는 목록을 흩어뜨린다. 몇 개의 매개 변수를 채운 것과 같다. zip은 어떤 목록에서 첫 번째 값을 추출하여 하나의 tuple로 조합하고, 모든 목록에서 두 번째 값을 추출하여 하나의 tuple로 조합한다. 가장 짧은 목록의 마지막 값을 추출한 후에 끝난다. 더 긴 목록의 다음 값은 버려진다. 다시 말하면마지막 메타그룹 개수는 원래 매개 변수 (교체 가능한 대상) 의 가장 짧은 길이에 의해 결정된다.예를 들어 지금 아무렇게나 값을 삭제하면 가장 짧은 목록의 길이가 2이고 데이터2의 열(세로로 보기)의 값은 모두 버려집니다.
rows = [
['Number', 'data1', 'data2'],
[2, 40],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
# out
[('Number', 2, 3, 4, 5, 6, 7), ('data1', 40, 40, 50, 30, 25, 50)]
마지막으로 zip가 되돌아오는 것은 zip 대상입니다. 데이터가 보이지 않습니다.list로 전환하면 됩니다.zip를 사용하면 데이터를 열에 따라 쓰기를 편리하게 할 수 있습니다.파일 저장
모든 작업이 끝난 후에는 반드시 파일을 저장하는 것을 기억해야 한다.경로와 파일 이름을 지정합니다. 접두사 이름은 xlsx입니다.
wb.save(r'D:\example.xlsx')
셀 스타일 설정 -- 스타일필요한 클래스 먼저 가져오기
from openpyxl.styles import Font, colors, Alignment
글꼴 연관, 색상, 정렬을 각각 지정할 수 있습니다.글꼴
bold_itatic_24_font = Font(name=' ', size=24, italic=True, color=colors.RED, bold=True)
sheet['A1'].font = bold_itatic_24_font
위의 코드는 등선 24호에 굵은 기울임꼴을 지정하고 글꼴 색깔이 빨간색입니다.셀의 Font 속성을 직접 사용하여 Font 객체에 값을 지정합니다.정렬 방법
셀의 속성aligment를 직접 사용합니다. 수직 거중과 수평 거중을 지정합니다.센터를 제외하고right,left 등 매개 변수를 사용할 수 있습니다.
# B1
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')
행 높이 및 열 너비 설정하기
때때로 데이터가 너무 길어서 다 보이지 않으면 칸을 길게 늘려야 한다.
# 2
sheet.row_dimensions[2].height = 40
# C
sheet.column_dimensions['C'].width = 30
셀 병합 및 버스트
병합 셀이란 병합 영역의 왼쪽 상단에 있는 셀을 기준으로 다른 셀을 덮어쓰고 큰 셀이라고 합니다.
반대로 셀을 분할한 후 이 큰 셀의 값을 원래의 왼쪽 상단 모서리로 되돌려줍니다.
# ,
sheet.merge_cells('B1:G1') #
sheet.merge_cells('A1:C3') #
병합 후 왼쪽 상단에만 데이터를 쓸 수 있습니다. 즉, 구간 중: 왼쪽 좌표입니다.병합할 칸에 데이터가 있으면 왼쪽 상단의 데이터만 유지되고 나머지는 버려집니다.다시 말하면 병합 전에 왼쪽 상단에 데이터를 쓰지 않으면 병합 후 칸에 데이터가 없습니다.
다음은 셀을 분할하는 코드입니다.분할하면 값이 A1 위치로 돌아갑니다.
sheet.unmerge_cells('A1:C3')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.