파일을 줄별로 저장할 때 - 예시

from openpyxl import *
from openpyxl.styles import Font, Alignmnet
from openpyxl.utils import get_column_letter


# excel sheet 시작하기
wb = Workbook()

# sheet 만들기 (기본적으로 1개 제공 추가 만들기)
worksheet = wb.create_sheet(sheetname)

# sheet 1개 더 만들기
worksheet1 = wb.create_sheet(sheetname1)

# field 이름 설정하기
field_name = ['이름', '나이', '주소', '연락처']

# field width 설정하기
field_width = ['10', '5', '30', '20']

# 특정 넣을 값을 만드는 로직 추가
member_list = Member.objects.all()


# 먼저 field 설정해주기 

for i, head in enumerate(field_name):
    # cell(1)을 해줘야지 가장 위에 줄에 입력해준다.
    # 해당 필드의 width 설정해주기
    worksheet.column_dimensions[get_column_letter(i + 1)].width = field_width[i]
    # 해당 필드의 값 주기
    worksheet.cell(1, i + 1).value = head
    # 폰트 설정해주기
    worksheet.cell(1, i + 1).font = Font(name='맑은 고딕', size=13, bold=True)
    # 폰트 위치 설정해주기 (정중앙정렬)
    worksheet.cell(1, i + 1).alignment = Alignment(horizontal='center', vertical='center')


# 해당 field들에게 값 주기
for i, data in enumerate(member_list):
    # i + 2를 해줘야지 2번째 줄부터 입력해준다.
    worksheet.cell(i + 2, 1).value = data.name
    worksheet.cell(i + 2, 2).value = data.age
    worksheet.cell(i + 2, 3).value = data.address
    worksheet.cell(i + 2, 4).value = data.phone


# 가장 기본적으로 셋팅되어 있는 sheet 삭제
wb.remove(wb['Sheet'])

# 저장하기
wb.save('member_name.xlsx')

 

파일을 읽어서 처리할 때 - 예시

 

import openpyxl


def open_pyxl():
    not_matching_membmer = []
    multiple_member = []
    what_error = []
    
    coupon = Coupon.objects.get(id=636)
    success_count = 0


    wb = openpyxl.load_workbook('account.xlsx')  # 해당 파일 불러오기
    ws = wb.active # 활성화 시트가지져오기
    wr = ws.rows # 열별로 가져오기 한줄 한줄 가져오기
    for i in wr:
        try:
            account = i[0].value (해당 줄의 첫 번째 행의 값 가져오기)
            member = Member.objects.get(account=account)
            coupon.issue([member])
            print('coupon _issue success : ', member.id, ' id: ', member.account)
            success_count += 1
        except Member.DoesNotExist:
            not_matching_membmer.append(account)
        except Member.MultipleObjectsReturned:
            multiple_member.append(account)
        except Exception as e:
            dict = {}
            dict[account] = str(e)
            what_error.append(dict)


    print('성공 갯수 :', success_count, '매칭 맴버 x : ', not_matching_membmer, '중복 멤버 :',
          multiple_member, '알 수 없는 에러 :', what_error)

 

+ Recent posts