Language/Python Python์œผ๋กœ ์—‘์…€ ์‚ฌ์šฉ(feat.openpyxl)
  • 728x90
    ๋ฐ˜์‘ํ˜•

     

    Python for Excel

    (feat.openpyxl)


     

    ๐Ÿ’ก Release Version Information
    Python 3.7.0
    openpyxl 2.5.4
    Visual Studio Code 1.24.1

     

     

     

    ํŒŒ์ด์ฌ์—์„œ ์—‘์…€ ์‚ฌ์šฉํ•˜๊ธฐ

    ๐Ÿ“Œ ํŒŒ์ด์ฌ์—์„œ ์—‘์…€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ธ๋“ค๋งํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” openpyxl, xlrd, xlrw ๋“ฑ์˜ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

    ์—ฌ๊ธฐ ์„œ๋Š” openpyxl ํŒจํ‚ค์ง€๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

     

    pip install openpyxl

     

     

     

    ์—‘์…€ ๋ฐ์ดํ„ฐ ์ฝ๊ณ  ์“ฐ๊ธฐ

    ๐Ÿ“Œ ์—‘์…€์„ ๋‹ค๋ฃจ๋Š” ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ๋ถ€๋ถ„์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋™์ž‘์ด๋ฏ€๋กœ ์—‘์…€ ํŒŒ์ผ์„ ์—ด๊ณ  ๊ทธ ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํƒ€๋ฅผ ์“ฐ๋Š” ๋™์ž‘์„ ์‚ดํŽด ๋ณธ๋‹ค. ์—‘์…€ ์ž…๋ ฅ ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ , ๋นจ๊ฐ„ ๋ฐ•์Šค ๋ถ€๋ถ„์€ ํ•ฉ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

     

    import openpyxl
    
    # ์—‘์…€ํŒŒ์ผ ์—ด๊ธฐ
    wb = openpyxl.load_workbook('score.xlsx')
    
    #ํ˜„์žฌ Active Sheet ์–ป๊ธฐ
    ws = wb.active
    # ws = wb.get_sheet_by_name("Sheet1")
    
    #์ ์ˆ˜๋ฅผ ์ฝ๊ธฐ
    for r in ws.rows:
    row_index = r[0].row # ํ–‰ ์ธ๋ฑ์Šค
    kor = r[1].value
    eng = r[2].value
    math = r[3].value
    sum = kor + eng + math
    
    # ํ•ฉ๊ณ„ ์“ฐ๊ธฐ
    ws.cell(row = row_index, column = 5).value = sum
    
    print(kor, eng, math, sum)
    
    # ์—‘์…€ ํŒŒ์ผ ์ €์žฅ
    wb.save("score2.xlsx")
    wb.close()

     

    ๋จผ์ € ์—‘์…€ ํŒŒ์ผ์„ ์˜คํ”ˆํ•˜๊ธฐ ์œ„ํ•ด openpyxl.load_workbook(์—‘์…€ํŒŒ์ผ๋ช…) ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ Workbook ๊ฐ์ฒด๋ฅผ ์–ป๋Š”๋‹ค.

     

    ํ•˜๋‚˜์˜ Workbook ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Worksheet ๋“ค์ด ์žˆ๋Š”๋ฐ ํ†ต์ƒ ๊ธฐ๋ณธ์œผ๋กœ Sheet1, Sheet2, Sheet3 ๋“ฑ 3๊ฐœ์˜ ์›Œํฌ์‹œํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

     

    ์—‘์…€ ํŒŒ์ผ์„ ์—ด๋ช… ๋ณดํ†ต ์ฒซ ๋ฒˆ์งธ ์‹œํŠธ๊ฐ€ Active Sheet๊ฐ€ ๋˜๋ฏ€๋กœ Worksheet ๊ฐ์ฒด์˜ active ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์›Œํฌ์‹œํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ์—‘์…€์€ ์ €์žฅ์‹œ ๋งˆ์ง€๋ง‰์— ์„ ํƒ๋œ ์‹œํŠธ๋ฅผ Active Sheet๋กœ ํ•˜๋ฏ€๋กœ, wb.get_sheet_by_name(์‹œํŠธ๋ช…)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค.

     

    ํŠน์ • cell ์— ๊ฐ’์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด cell.value ์— ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋˜๋Š”๋ฐ ์‹œํŠธ์—์„œ cell์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ws["A1"] ๊ณผ ๊ฐ™์ด ์—‘์…€์‹ cell ์ง€์ •๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ํ–‰์—ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ws.cell(row=ํ–‰ ์ธ๋ฑ์Šค, column=์—ด ์ธ๋ฑ์Šค) ํ‘œํ˜„์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

     

    ์—‘์…€์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Workbook ๊ฐ์ฒด์—์„œ save() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์—‘์…€ ์‚ฌ์šฉ์ด ๋ชจ๋‘ ๋๋‚œ ๊ฒฝ์šฐ close() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

     

     

     

    ์—‘์…€ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

    from openpyxl import Workbook
    
    wb = Workbook()
    ws1 = wb.active # ํ˜„์žฌ ์—ด๋ ค ์žˆ๋Š” Sheet
    ws1.title = "first_Sheet" # ์‹œํŠธ ws1์˜ ์ผ๋ฆ„์„ ์ง€์ •
    ws1["A1"] = "Hello world" # ์…€ A1์— ์ž…๋ ฅ
    print(ws1["A1"].value) # ์…€ A1์˜ ๋‚ด์šฉ ์ถœ๋ ฅ
    
    wb.save("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx") # ์ €์žฅ

     

    ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ €์žฅ๋œ ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด A1 ์…€์— Hellow World ๋ผ๊ณ  ์“ฐ์—ฌ์ ธ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

     

     

    ๊ธฐ์กด ์—‘์…€ ํŒŒ์ผ ์—ด๊ธฐ, ์‹œํŠธ ์ถ”๊ฐ€

    from openpyxl import load_workbook
    
    wb = load_workbook("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx")
    ws2 = wb.create_sheet(title = "second_Sheet")
    for row in range(1, 10):
    for col in range(1, 10):
    ws2.cell(row = row, column = col, value = int("{}{}".format(row, col)))
    
    wb.save("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx")

     

     

    • load_workbook : ์—‘์…€ ํŒŒ์ผ ์—ด๊ธฐ
    • create_sheet : ์‹œํŠธ ์ถ”๊ฐ€
    • cell : ์‹œํŠธ(sheet)์—์„œ ํ–‰(row), ์—ด(col) ์„ ์„ ํƒํ•˜์—ฌ ๊ฐ’(value)์„ ๋„ฃ๋Š”๋‹ค.

     

    ๊ฒฐ๊ณผ

     

     

    ์ˆ˜์‹ ์ž…๋ ฅ

    import datetime
    from openpyxl import load_workbook
    
    wb = load_workbook("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx")
    ws = wb.active
    
    ws['A4'] = "=SUM(10,20,30)"
    
    wb.save("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx")

     

     

     

    ์…€ ๋ณ‘ํ•ฉ

    import datetime
    from openpyxl import load_workbook
    
    wb = load_workbook("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx")
    ws = wb.active
    
    ws.merge_cells("A1:B1")
    ws.merge_cells(start_row=2, start_column=1, end_row=2, end_column=2)
    
    wb.save("D:/workspace/Python/Python37/Python-Openpyxl-App/test.xlsx")

     

     

     

     

    728x90
    ๋ฐ˜์‘ํ˜•
์ƒ๋‹จ์œผ๋กœ