12. 엑셀 파일 다루기

chaejm55·2021년 4월 14일
2

디스코드봇

목록 보기
14/18
post-thumbnail

0. 들어가기 전에

이전 포스팅에서는 텍스트 파일을 다루는 방법을 알아봤는데, 이번엔 openpyxl로 엑셀파일을 다루는 방법을 알아보겠다. 텍스트 파일 보다 조금 더 깔끔하게 데이터를 다룰 수 있을 것이다.

1. openpyxl

먼저 터미널로 라이브러리를 설치해주자.
라이브러리 문서

pip install openpyxl

기본 사용법은 아래와 같다.

  • 엑셀 파일 열기
    book = openpyxl.load_workbook("파일이름.xlsx")

  • 시트 선택하기
    ws = book["시트이름"] 이름으로 시트 열기
    ws = book.active 활성화 된 시트 열기

  • 특정 셀에 접근하기
    cell = ws.cell(row=1, column=1)
    cell = ws['A1']

  • 특정 셀의 값 얻기
    ws['A1'].value

  • 특정 셀의 값 수정 하기
    ws['A1'] = "new_value"

  • 특정 범위 접근하기
    cells = ws['A1':'C3']
    rows = ws[1:3]
    columns = ws['A':'C']
    all_rows = ws.rows
    all_columns = ws.columns

  • 내용 append 하기
    ws.append([column1, column2, ...])

  • 저장 하거나 닫기
    book.save(filename) 파일 내용을 수정 했을 시
    book.close() 파일 내용을 읽기만 했을 시

2. 코드 예시

먼저 discord_bot.xlsx 파일을 생성하고 시트 이름을 discord_bot으로 해두겠다.

다음으로 엑셀 파일에 내용을 쓰는 기능을 작성해보자.

import openpyxl

@app.command(name="엑셀쓰기")
async def write_excel(ctx, write_str: str): # 입력 내용을 받는다.
    filename = "discord_bot.xlsx"
    book = openpyxl.load_workboot(filename)
    ws = book.get_sheet_by_name("discord_bot") # 시트 이름으로 선택
    ws.append([str(ctx.author), write_str]) # 맨 마지막에 append 한다.
    book.save(filename) // 수정 내용 저장
    await ctx.send("엑셀 입력 완료!")

마지막으로 엑셀 파일에서 명령어 사용자가 쓴 내용을 받아보자.

import openpyxl

@app.command(name="엑셀읽기")
async def read_excel(ctx):
    filename = "discord_bot.xlsx"
    book = openpyxl.load_workboot(filename)
    ws = book.get_sheet_by_name("discord_bot")
    result = []
    for row in ws.rows: # 모든 row 순회
    	if row[0].value == str(ctx.author): # 명령어 사용자가 엑셀 쓰기한 내용 찾기
     	    result.append(row[1].value)
    book.close()
    if result:
    	await ctx.send(f'{ctx.author}님이 엑셀 파일에 입력한 내용들입니다.')
        await ctx.send(result.join("\n"))
    else:
    	await ctx.send(f'{ctx.author}님이 엑셀 파일에 입력한 내용이 없습니다.')

<엑셀 파일 내용 삭제 후 입력>

그냥 코드로 파일을 생성하고 싶다면 예시의 동일한 부분을

import openpyxl

book = openpyxl.Workbook()

...
...
...

book.save("파일이름.xlsx")

위의 코드로 대체 해주면 된다.

3. 발생할 법할 오류

1) PermissionError

엑셀파일을 열고 save()사용 시 발생하는 오류이다. 엑셀 파일을 닫고 다시 실행해보자.

2) FileNotFoundError

파일명이 잘못 되었을 때 발생한다. 오타가 없는지 확인하자.

3) KeyError

시트명이 잘못 되었을 때 발생한다. 다시 확인해보자.

4. 마무리

텍스트 파일에 이어 엑셀 파일을 다루는 방법까지 알아보았다. 봇을 운영하면서 꼭 저장 해두어야 할 내용이 있다면 이 포스팅이나 이전 포스팅을 활용하여 저장해보자.

github 전체 코드

time.sleep(259200)
profile
여러가지를 시도하는 학생입니다

0개의 댓글