Python Excel 처리 라이브러리 openpyxl 상세 정보

6984 단어 PythonExcelopenpyxl
Python의 penpyxl은 xlsx 형식의 Excel 파일을 처리할 수 있는 제3자 라이브러리입니다..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')

좋은 웹페이지 즐겨찾기