๐Ÿ ํŒŒ์ด์ฌ ์ดˆ๋ณด์ž ๊ฐ€์ด๋“œ : ์—‘์…€ ์ •๋ณต! (feat. OpenPyXL) ๐Ÿ“Š

 



์•ˆ๋…•ํ•˜์„ธ์š”! ๋ฐ์ดํ„ฐ ์ž๋™ํ™”์— ๊ด€์‹ฌ ์žˆ๋Š” ์ดˆ๋ณด ํ”„๋กœ๊ทธ๋ž˜๋จธ ์—ฌ๋Ÿฌ๋ถ„! ๐Ÿ‘‹ ์˜ค๋Š˜์€ ํŒŒ์ด์ฌ์„ ์ด์šฉํ•ด์„œ ์—‘์…€ ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ์•„์ฃผ ์œ ์šฉํ•˜๊ณ  ์žฌ๋ฏธ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”. ์—‘์…€ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์‹œ๊ฐ„ ์ ˆ์•ฝ์€ ๋ฌผ๋ก ์ด๊ณ , ์นผํ‡ด์˜ ๊ธฐํšŒ๊นŒ์ง€ ์–ป์„ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๐Ÿš€

ํŒŒ์ด์ฌ์—์„œ ์—‘์…€์„ ๋‹ค๋ฃจ๋Š” ๋ฐ๋Š” ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๊ณ  ์ดˆ๋ณด์ž์—๊ฒŒ๋„ ์‰ฌ์šด **OpenPyXL**์„ ์ค‘์‹ฌ์œผ๋กœ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณผ ๊ฑฐ์˜ˆ์š”. ์„ค์น˜๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ฝ๊ณ  ์“ฐ๊ธฐ๊นŒ์ง€, ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผ์™€ ๋ณด์„ธ์š”! ๐Ÿ˜Š


1. OpenPyXL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ํ•˜๊ธฐ ๐Ÿ› ️

ํŒŒ์ด์ฌ์˜ ๊ฐ•๋ ฅํ•จ์€ ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค. OpenPyXL์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ์„ค์น˜๋ฅผ ํ•ด์•ผ๊ฒ ์ฃ ? ํ„ฐ๋ฏธ๋„(๋ช…๋ น ํ”„๋กฌํ”„ํŠธ ๋˜๋Š” PowerShell)์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.

Bash
pip install openpyxl

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ด์ œ ์—‘์…€ ํŒŒ์ผ ๋งˆ๋ฒ•์„ ๋ถ€๋ฆด ์ค€๋น„ ๋! ✨


2. ์ƒˆ ์—‘์…€ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ✍️

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์ œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ด…์‹œ๋‹ค. ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒˆ๋กœ์šด ์—‘์…€ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ์›ํ•˜๋Š” ์…€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์ œ 1: ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ

Python
import openpyxl

# 1. ์ƒˆ๋กœ์šด ์›Œํฌ๋ถ(์—‘์…€ ํŒŒ์ผ) ์ƒ์„ฑ
wb = openpyxl.Workbook()

# 2. ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ์›Œํฌ์‹œํŠธ(์‹œํŠธ) ์„ ํƒ
ws = wb.active 
# ๊ธฐ๋ณธ ์‹œํŠธ ์ด๋ฆ„์€ 'Sheet'์ž…๋‹ˆ๋‹ค.

# 3. ์…€์— ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜๊ธฐ
# A1 ์…€์— 'ํŒŒ์ด์ฌ' ์ž…๋ ฅ
ws['A1'] = 'ํŒŒ์ด์ฌ' 
# B2 ์…€์— '์—‘์…€ ์ž๋™ํ™”' ์ž…๋ ฅ
ws['B2'] = '์—‘์…€ ์ž๋™ํ™”'
# C3 ์…€์— ์ˆซ์ž 100 ์ž…๋ ฅ (์ˆซ์ž, ๋‚ ์งœ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ€๋Šฅ)
ws.cell(row=3, column=3, value=100) # row์™€ column ์ธ๋ฑ์Šค๋กœ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ

# 4. ํŒŒ์ผ ์ €์žฅํ•˜๊ธฐ
wb.save("์ดˆ๋ณด์ž_ํ…Œ์ŠคํŠธ.xlsx")

print("์—‘์…€ ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ✅")

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ดˆ๋ณด์ž_ํ…Œ์ŠคํŠธ.xlsx๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์ง€์ •๋œ ์…€์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿฅณ


3. ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ž…๋ ฅํ•˜๊ธฐ (append) ๐Ÿ“‹

๋ฐ˜๋ณต๋ฌธ๊ณผ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ํšจ์œจ์ ์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค. append() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์›Œํฌ์‹œํŠธ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ํ–‰์— ์ˆœ์„œ๋Œ€๋กœ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์ œ 2: ์—ฌ๋Ÿฌ ํ–‰ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ

Python
import openpyxl

wb = openpyxl.Workbook()
ws = wb.active

# ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ (ํ–‰ ๋‹จ์œ„๋กœ ์ž…๋ ฅ๋  ๋ฐ์ดํ„ฐ)
data = [
    ('์ด๋ฆ„', '๋‚˜์ด', '์ง์—…'),  # ์ฒซ ํ–‰ (ํ—ค๋”)
    ('๊น€๋ฏผ์ˆ˜', 28, '๊ฐœ๋ฐœ์ž'),
    ('๋ฐ•์ง€์˜', 32, '๋””์ž์ด๋„ˆ'),
    ('์ดํ˜„์šฐ', 25, '๋งˆ์ผ€ํ„ฐ')
]

# for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
for row_data in data:
    ws.append(row_data) # ๋งˆ์ง€๋ง‰ ํ–‰์— ์ถ”๊ฐ€

# ํŒŒ์ผ ์ €์žฅ
wb.save("์ง์›_๋ฆฌ์ŠคํŠธ.xlsx")

print("์ง์› ๋ฆฌ์ŠคํŠธ ํŒŒ์ผ์ด ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ“")

์ด ๋ฐฉ๋ฒ•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒฐ๊ณผ๋‚˜ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์—‘์…€๋กœ ์˜ฎ๊ธธ ๋•Œ ์•„์ฃผ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ws.append()๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰ ๋‹จ์œ„๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ผญ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”!


4. ๊ธฐ์กด ์—‘์…€ ํŒŒ์ผ ์ฝ๊ณ  ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๐Ÿ“–

์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒํผ์ด๋‚˜ ๊ธฐ์กด ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ฃ ! openpyxl.load_workbook() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ์กด ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์ œ 3: ํŠน์ • ์…€ ๊ฐ’ ์ฝ๊ธฐ

Python
import openpyxl

# 1. ๊ธฐ์กด ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
try:
    wb = openpyxl.load_workbook("์ดˆ๋ณด์ž_ํ…Œ์ŠคํŠธ.xlsx")
except FileNotFoundError:
    print("ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž_ํ…Œ์ŠคํŠธ.xlsx ํŒŒ์ผ์„ ๋จผ์ € ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.")
    exit()

# 2. ์›ํ•˜๋Š” ์›Œํฌ์‹œํŠธ ์„ ํƒ (์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผ)
ws = wb['Sheet'] # ๊ธฐ๋ณธ ์‹œํŠธ ์ด๋ฆ„ 'Sheet'

# 3. ์…€์˜ ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ
value_a1 = ws['A1'].value
value_c3 = ws.cell(row=3, column=3).value

print(f"A1 ์…€์˜ ๊ฐ’: {value_a1}")
print(f"C3 ์…€์˜ ๊ฐ’: {value_c3}") 

# 4. ์ „์ฒด ๋ฐ์ดํ„ฐ ํ–‰/์—ด ์ˆœํšŒํ•˜๋ฉฐ ์ฝ๊ธฐ
print("\n--- ์ „์ฒด ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ---")
# iter_rows()๋Š” ํ–‰์„ ์ˆœํšŒํ•˜๋ฉฐ ์…€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
for row in ws.iter_rows():
    row_values = [cell.value for cell in row]
    print(row_values)

**.value**๋ฅผ ๋ถ™์—ฌ์•ผ ์…€์— ์‹ค์ œ๋กœ ์ž…๋ ฅ๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ .value๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ์…€ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”! ⚠️


5. OpenPyXL ํ•ต์‹ฌ ๊ฐœ๋… ์ •๋ฆฌ ๐Ÿ”‘

๊ฐœ๋…์„ค๋ช…OpenPyXL ๊ฐ์ฒด๋น„๊ณ 
์›Œํฌ๋ถ (Workbook)์—‘์…€ ํŒŒ์ผ ์ „์ฒด (์ €์žฅ ๋‹จ์œ„)wbopenpyxl.Workbook() ๋˜๋Š” load_workbook()์œผ๋กœ ์ƒ์„ฑ
์›Œํฌ์‹œํŠธ (Worksheet)์—‘์…€ ํŒŒ์ผ ์•ˆ์˜ ํ•˜๋‚˜์˜ ์‹œํŠธ (Tab)wswb.active ๋˜๋Š” wb['์‹œํŠธ์ด๋ฆ„']์œผ๋กœ ์ ‘๊ทผ
์…€ (Cell)์›Œํฌ์‹œํŠธ์˜ ์ตœ์†Œ ๋‹จ์œ„ (๊ฐ’ ์ž…๋ ฅ/์ฝ๊ธฐ)cellws['A1'] ๋˜๋Š” ws.cell(row=1, column=1)๋กœ ์ ‘๊ทผ

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ ๐ŸŽ‰

ํŒŒ์ด์ฌ OpenPyXL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์—‘์…€ ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์›Œ์ง€๋Š”์ง€ ๋ณด์…จ์ฃ ? ์ด ์˜ˆ์ œ๋“ค๋งŒ์œผ๋กœ๋„ ๊ฐ„๋‹จํ•œ ๋ณด๊ณ ์„œ ์ƒ์„ฑ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ ์ž‘์—… ๋“ฑ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์ง€๊ธˆ ๋ฐ”๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปดํ“จํ„ฐ์—์„œ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด์„œ ํŒŒ์ด์ฌ๊ณผ ์—‘์…€์˜ ์‹œ๋„ˆ์ง€๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”! ์ฝ”๋”ฉ์€ ์ง์ ‘ ํ•ด๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ต๋‹ˆ๋‹ค. ๐Ÿ‘

๋Œ“๊ธ€