openpyxl로 격자 치기

8290 단어 OpenpyxlPython

Introduction


다음 excel 데이터 파일 (test.xlsx) 이 있습니다.

한 번은 이 excel이 칸을 긋기를 바라는 요청이 있습니다. (여기는 검은색 테두리입니다.)
만약 excel 파일이나 작업표의 수량이라면 수동으로 줄을 그을 수 있지만, 앞으로는 대량의 excel 파일을 똑같이 조작할 수 있습니다.이런 상황에 대응하기 위해서는 자동화라는 작업이 매우 편리할 것이다.

스크립트 및 실행 결과


Excel을 로드하고 숫자 값이 있는 영역에 메쉬를 그리는 스크립트는 다음과 같습니다.
sheet_border.py

'''
    sheet_border.py
    purpose: read xlsx and set border automatically
'''

import openpyxl as xl
from openpyxl.styles.borders import Border, Side


# set input file name
inputfile = 'test.xlsx'

side = Side(style='thin', color='000000')

# set border (black thin line)
border = Border(top=side, bottom=side, left=side, right=side)

# read tmp xlsx
wb1 = xl.load_workbook(filename=inputfile)
ws1 = wb1.worksheets[0]

# write in sheet
for row in ws1:
    for cell in row:
        ws1[cell.coordinate].border = border

# save xlsx file
wb1.save(inputfile)
결과는 다음과 같다.

스크립트 세부 정보


from openpyxl.styles.borders import Border, Side

from openpyxl.styles.borders import Border, Side
Border 함수와 Side 함수를 직접 호출할 수 있습니다.Side 함수는 이름과 같이 Side 객체를 반환하는 함수입니다.색상과 선 두께를 지정하기 위해 Border 함수를 동시에 가져옵니다.

Side 함수

side = Side(style='thin', color='000000')
이 행은 사이드 객체를 사이드 변수에 대입합니다.여기에 검은색 선과 가는 선을 지정했다.매개 변수 스타일에는'thein'외에'dash Dot','dash Doot','double','hair','dotted','medium Dash Doot','medium Dash Dot','slant Dash Dot','thick','thin','medium','medium Dash Dot'도 지정할 수 있다.
다음처럼 변경해서 실행해 보세요.
side = Side(style='thick', color='FF0000')
결과는 다음과 같이 굵은 빨간색 선을 그렸다.

Border 함수

border = Border(top=side, bottom=side, left=side, right=side)
이 행은 border 객체를 border 변수에 대입합니다.여기에 칸의 top (위쪽),bottom (아래쪽),left (왼쪽),right (오른쪽) 를 지정합니다.이곳의 모든 곳은 같은 사이드를 지정했다.

격자를 만들다

# write in sheet
for row in ws1:
    for cell in row:
        ws1[cell.coordinate].border = border
이 부분에서, 모든 칸의 격자 대상은Border 함수에서 지정한 격자 형식을 포함합니다.

적용: 가치가 없는 부분에 테두리를 두지 않음


test.xlsx가 다음과 같은 내용이라고 가정해 보세요.

이게 바로 위에서 보여준 sheet입니다.border.py를 실행한 후 결과는 다음과 같습니다.

위의 그림에서 보듯이 11행과 E열 등 수치가 전혀 없는 부분을 뛰어넘고 격자에 테두리를 그릴 수 있다.
값이 없는 부분에 테두리를 덧붙이고 싶지 않은 경우 아래와 같이 sheetborder.다시 쓰다.
# write in sheet
for row in ws1:
    for cell in row:
        if ws1[cell.coordinate].value:
            ws1[cell.coordinate].border = border
위에서 말한 바와 같이, if 문장을 추가하면, 칸 값이 None이 아닐 때만 테두리에 쓸 수 있습니다.이 결과는 아래와 같다.

이렇게 하면 대량의 excel 파일이 있어도 하나하나 손으로 선을 긋는 번거로운 작업에서 해방될 수 있다.

좋은 웹페이지 즐겨찾기