ID:
PW:

     0 ºÐ
     13 ºÐ

¿£Áö´Ï¾î µ¹Á¾
  dolljong
ÇÁ·Î±×·¡¹Ö Tips
ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ TipÀ» °øÀ¯ÇÏ´Â °÷ÀÔ´Ï´Ù.


(¿£Áö´Ï¾î¸¦ À§ÇÑ) ÆÄÀ̽㠽ÃÀÛÇϱâ[13] ¿¢¼¿ ÆÄÀ̽㠿¬µ¿
À̼®Á¾  2022-11-30 04:52:30, Á¶È¸ : 642, Ãßõ : 46
- Download #1 : engpython13.png (32.5 KB), Download : 8


(¿£Áö´Ï¾î¸¦ À§ÇÑ) ÆÄÀ̽㠽ÃÀÛÇϱâ[13]

 

³»¿ë : ¿¢¼¿ ÆÄÀ̽㠿¬µ¿

ÂüÁ¶ : https://wikidocs.net/135789 (»çÀå´Ô ¸ô·¡ ÇÏ´Â ÆÄÀ̽㠾÷¹«ÀÚµ¿È­)

xlwings °ø½Ä ȨÆäÀÌÁö : https://www.xlwings.org/

 

 

 

0.½ÃÀÛÇϸç

Áö³­ °­Á¿¡¼­ pandas¸¦ ´Ù·ç¾ú´Ù. dataframeÀº excel°ú À¯»çÇϸ鼭 databaseó·³ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ¾ú´Ù. pandas´Â Å×À̺í ÇüÅÂÀÇ Á¤ÇüÈ­µÈ µ¥ÀÌÅ͸¦ ó¸®ÇÒ ¶§ À¯¸®ÇÏ´Ù. ¿ì¸®´Â ¿©ÀüÈ÷ exce·Î Á¤ÇüÈ­µÇÁö ¾ÊÀº °è»êµéÀ» ÇÑ´Ù. ±¸Á¶°è»ê¼­¸¦ ¿¢¼¿·Î ¸¸µå´Â °æ¿ì°¡ ¸¹Àºµ¥ ¿¢¼¿À» ¿öµå+MathCADó·³ ¾²°í ÀÖ´Â °ÍÀÌ ¿£Áö´Ï¾î¸µ ¾÷°èÀÇ Çö½ÇÀÌ´Ù. ±×·¡¼­ ¾÷¹«ÀÚµ¿È­¿¡¼­ Excel »ç¿ëÀº »©³õÀ» ¼ö ¾ø´Ù. ±×·¡¼­ À̹ø °­Á¿¡¼­´Â pythonÀ¸·Î excelÀ» Á÷Á¢ ´Ù·ç´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°íÀÚ ÇÑ´Ù.

 

1. xlwings¼³Ä¡ È®ÀÎ

pythonÀ¸·Î excelÀ» ÅëÁ¦ÇÒ ¼ö ÀÖ´Â ¿©·¯°¡Áö ¸ðµâÀÌ ÀÖ´Ù. xlwings, openpyxl, xlsxwriter (xlsx),  xlrd, xlwt(xls) µîÀÌ ±×°ÍÀÌ´Ù. ÀÌÁß¿¡¼­ xlwings¸¦ ´Ù·çµµ·Ï ÇϰڴÙ. ´Ù¸¥ ¸ðµâµéÀº Àаųª ¾²±â¸¸ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ xlwings´Â ¿¢¼¿¿¡¼­ pythonÀ¸·Î ¸¸µç »ç¿ëÀÚ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ë½Å xlwings´Â excelÀÌ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ´Ù¸¥ ¸ðµâµéÀº excelÀÌ ¼³Ä¡µÇ¾î ÀÖÁö ¾È¾Æµµ excelÆÄÀÏÀ» »ý¼ºÇϰí ÀÐÀ» ¼ö ÀÖ´Ù. ¿ëµµ¿¡ µû¶ó Àû´çÇÑ °ÍÀ» °í¸£¸é µÈ´Ù.

 

anaconda¸¦ ¼³Ä¡Çß´Ù¸é xlwingsµµ °°ÀÌ ¼³Ä¡µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. È®ÀÎÇØº¸±â À§Çؼ­ anaconda prompt¸¦ ¶ç¿ì°í pip show xlwings¶ó°í ÀÔ·ÂÇØº¸ÀÚ.

(base) C:\Users\ysj>pip show xlwings
Name: xlwings
Version:
0.24.9
Summary: Make Excel fly: Interact
with Excel from Python and vice versa.
Home-page: https://www.xlwings.org
Author: Zoomer Analytics LLC
Author-email: felix.zumstein@zoomeranalytics.com
License: BSD
3-clause
Location: c:\programdata\anaconda3\lib\site-packages
Requires: pywin32

Required-by:

 

xlwings¿¡ °üÇÑ Á¤º¸µéÀ» º¼ ¼ö ÀÖ´Ù. ¹öÀüÀº 0.24.9À̰í ȨÆäÀÌÁö´Â https://www.xlwings.org ±×¸®°í ¼³Ä¡µÇ¾î ÀÖ´Â µð·ºÅ丮´Â  c:\programdata\anaconda3\lib\site-package¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

 

¸¸ÀÏ anaconda¸¦ ¼³Ä¡ÇÏÁö ¾Ê¾Æ xlwings°¡ ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê´Ù¸é ¸í·Éâ¿¡¼­ pip install xlwings¶ó°í ÀÔ·ÂÇØ¼­ xlwings¸¦ ¼³Ä¡ÇÏ¸é µÈ´Ù.

 

2. ¿¢¼¿ÆÄÀÏ ¿­±â

ÀÏ´Ü ±âÁ¸¿¡ ÀÖ´Â ¿¢¼¿ÆÄÀÏÀ» ¿©´Â °ÍºÎÅÍ ÇØº¸ÀÚ. Áö³­¹ø °­Á¿¡¼­ ½è´ø Áß°£°í»çÁ¡¼ö.xlsx¸¦ ¿­¾îº¸°Ú´Ù. xlwings ¸ðµâÀ» xw¶ó´Â À̸§À¸·Î importÇÑ´Ù. ±×¸®°í xw.Book(¿¢¼¿ÆÄÀϸí)À» ½áÁÖ¸é ¿¢¼¿ÆÄÀÏÀ» ¿¬´Ù. ±×¸®°í wb¿¡ ÇÒ´çÇß´Ù. wb´Â workbookÀ» ÀǹÌÇÑ´Ù. ¾ÕÀ¸·Î ÀÌ ¿öÅ©ºÏ¿¡ Á¢±ÙÇÒ ¶§´Â wb¸¦ »ç¿ëÇϸéµÈ´Ù. ½Ç½ÀÀº ÁÖÇÇÅÍ³ëÆ®ºÏÀ» ÀÌ¿ëÇØ¼­ ÇϰڴÙ. d:\dev\xlwings µð·ºÅ丮¿¡¼­ ÁÖÇÇÅÍ ³ëÆ®ºÏÀ» ½ÇÇàÇϰí xw¶ó´Â À̸§À¸·Î ³ëÆ®ºÏ À̸§À» º¯°æÇؼ­ ÀúÀåÇß´Ù. Áß°£°í»çÁ¡¼ö.xlsxÆÄÀϵµ °°Àº µð·ºÅ丮¿¡ ÀÖ´Ù.

import xlwings as xw
wb = xw.Book(
'Áß°£°í»çÁ¡¼ö.xlsx')

 

ÀÌ ¼¿À» ½ÇÇàÇÏ¸é ½ÇÇà½ÃŰ¸é ¾Æ¹« Àϵµ ÀϾÁö ¾Ê´Â´Ù. ¸¸ÀÏ Áß°£°í»çÁ¡¼ö.xlsxÆÄÀÏÀÌ ÀÌ¹Ì ¿­·Á ÀÖ¾ú´Ù¸é ¿¬°áÀÌ µÇ°í, ¿¢¼¿ÆÄÀÏÀÌ ¿­·ÁÀÖÁö ¾Ê¾Ò´Ù¸é ÇØ´ç ÆÄÀÏÀÌ ¿­¸°´Ù. ÇØ´ç ÆÄÀÏÀÇ ³»¿ëÀº ¾Æ·¡¿Í °°´Ù.

 

3. xlwings ¿©·¯°¡Áö ±â´Éµé

-        sheet Á¢±ÙÇϱâ

ÀÌÁ¦ ¿öÅ©ºÏ¿¡ Á¢±ÙÇßÀ¸´Ï ½ÃÆ®¿¡ Á¢±ÙÇÒ Â÷·Ê´Ù. sheets(½ÃÆ®À̸§)À¸·Î ¿øÇÏ´Â ½ÃÆ®¿¡ Á¢±ÙÇß´Ù.

sheet=wb.sheets('sheet1')

 

ÀÌÁ¦ sheet.nameÀ̶ó°í Çϸé sheetÀÇ À̸§À» ¾òÀ» ¼ö ÀÖ´Ù.

sheet.name
'Sheet1'

-        cell¿¡ Á¢±ÙÇϱâ(value, formula)

¼¿ÀÇ ³»¿ë¿¡ Á¢±ÙÇϱâ À§Çؼ­ sheet[ ] ¾È¿¡ ÁÖ¼Ò¸¦ ¹®ÀÚ¿­·Î ½áÁÖ°í value¼Ó¼ºÀ» ½áÁÖ¸é µÈ´Ù.

sheet['B4'].value
'È«±æµ¿'

 

¼¿ÀÇ value ¿Ü¿¡ formula¼Ó¼ºµµ ÀÖ´Ù. °ªÀÌ ¾Æ´Ñ ¼ö½ÄÀ» Àаųª ¾²´Â °ÍÀÌ´Ù. F4¼¿ ÁÖ¼Ò¿¡ =sum(C4:E4)¶ó´Â ¼ö½ÄÀ» ÀÔ·ÂÇØº¸ÀÚ. ¿¢¼¿¿¡¼­ ÀÔ·ÂÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó python ÄÚµå·Î ÀÔ·ÂÇÏ´Â °ÍÀÌ´Ù. ¿¢¼¿ÀÇ F4 ¼¿¿¡ ¿ì¸®°¡ ¿øÇÏ´Â ¼ö½ÄÀÌ ÀÔ·ÂµÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

sheet['F4'].formula='=sum(C4:E4)'

¼ö½ÄÀÌ ÀÔ·ÂµÈ F4 ¼¿ÀÇ °ªÀ» ¾Ë°í ½ÍÀ¸¸é value¼Ó¼ºÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù.

sheet['F4'].value
250.0

 

-        ¼¿¿¡ ¸®½ºÆ® ³Ö±â

ÆÄÀ̽ãÀÇ listÇü½ÄÀÇ µ¥ÀÌÅ͸¦ ¿¢¼¿ÀÇ ¼¿¿¡ ³ÖÀ» ¼ö ÀÖ´Ù. ù¹øÂ° ¸®½ºÆ®´Â °ú¸ñ¸íµé·Î ÀÌ·ç¾îÁ® ÀÖ°í µÎ¹øÂ° ¸®½ºÆ®´Â Á¡¼ö·Î ÀÌ·ç¾îÁø ¸®½ºÆ®¸¦ ¹­¾î¼­ Å« ¸®½ºÆ®·Î ¸¸µé¾î¼­ ¼¿ÀÇ value·Î ÇÒ´çÇÏ¸é µÈ´Ù. Å« ¸®½ºÆ® ¾ÈÀÇ ¸®½ºÆ®´Â ÇàÀ¸·Î º¸¸é µÈ´Ù.

sheet['B10'].value = [['ö±ÙÄÜÅ©¸®Æ®', '»óÇϼöµµ', '¼ö¹®ÇÐ'], [10.0, 20.0, 30.0]]

 

-        ¿¢¼¿ ¹üÀ§ °ª ÆÄÀ̽ãÀ¸·Î °¡Á®¿À±â

À̹ø¿¡´Â À§¿¡¼­ ÀÔ·ÂÇÑ ¿¢¼¿ÀÇ ¹üÀ§°ªÀ» ÆÄÀ̽ãÀÇ µ¥ÀÌÅÍ·Î °¡Á®¿Íº¸ÀÚ. ¿øÇÏ´Â ±¸¿ªÀ» ¼³Á¤Çϱâ À§Çؼ­´Â range¼Ó¼ºÀ» ÀÌ¿ëÇØ¾ß ÇÑ´Ù.

sheet.range('B10','D11').value
[[
'ö±ÙÄÜÅ©¸®Æ®', '»óÇϼöµµ', '¼ö¹®ÇÐ'], [10.0, 20.0, 30.0]]

¸¸ÀÏ ¼¿ B10ºÎÅÍ D11ÀÌ ¿¬¼ÓµÇ¾î ÀÖ´Ù¸é expand()¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. B10À¸·ÎºÎÅÍ È®ÀåÇ϶ó´Â ¶æÀÌ´Ù. À§ÀÇ °á°ú¿Í µ¿ÀÏÇÏ´Ù.

sheet['B10'].expand().value

[['ö±ÙÄÜÅ©¸®Æ®', '»óÇϼöµµ', '¼ö¹®ÇÐ'], [10.0, 20.0, 30.0]]

 

expand ¿¡´Â ¿É¼ÇÀÌ ÀÖ´Ù. ¡®down¡¯, ¡®right¡¯, ¡®table¡¯ÀÌ´Ù. ()¸¸ ¾²¸é ¡®table¡¯ÀÌ Àû¿ëµÈ´Ù. tableÀ» ¡®down¡¯°ú ¡®right¡¯°¡ °°ÀÌ Àû¿ëµÈ °ÍÀ¸·Î º¸¸é µÈ´Ù. ¿¢¼¿¿¡¼­ shift-Control۸¦ ´©¸£°í ¾Æ·¡ ¹æÇâ Ű³ª ¿À¸¥ÂÊ ¹æÇâ ۸¦ ´©¸£¸é ¼±Åÿµ¿ªÀÌ È®ÀåµÇ´Â °³³ä°ú °°´Ù.

sheet['B10'].expand('right').value
[
'ö±ÙÄÜÅ©¸®Æ®', '»óÇϼöµµ', '¼ö¹®ÇÐ']

B10À¸·ÎºÎÅÍ ¿À¸¥ÂÊÀ¸·Î È®ÀåµÇ¾î ¼±ÅÃµÈ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

 

È®ÀåµÈ ÁÖ¼Ò¸¦ ¾Ë°í ½Í´Ù¸é address¼Ó¼ºÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù. ¡®:¡¯·Î ±¸ºÐµÈ ÁÖ¼Ò¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

sheet['B10'].expand().address
'$B$10:$D$11'

 

-        ¿¢¼¿°ú dataframe

Àü °­Á¿¡¼­ pandas dataframeÀ» ´Ù·é ¹Ù ÀÖ´Ù. dataframeÀÇ °ªÀ» ¿¢¼¿·Î ³Ö°Å³ª ¿¢¼¿ÀÇ °ªµéÀ» dataframeÀ¸·Î °¡Á®¿Í¼­ ÀÛ¾÷ÇÏ¸é ÆíÇÒ °ÍÀÌ´Ù.

pandas¸¦ pd¶ó´Â À̸§À¸·Î importÇϰí Åä¸ñ½Ã°øÇаú ±³·®°øÇÐ °ú¸ñ¸í°ú Á¡¼ö·Î dataframeÀ» ¸¸µé¾î df¶ó´Â À̸§ÀÇ º¯¼ö¿¡ ÇÒ´çÇÑ´Ù. index¿Í columns¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ 0°ú 1ÀÇ index°¡ ¸¸µé¾îÁ³´Ù.

import pandas as pd
df=pd.DataFrame([[
'Åä¸ñ½Ã°øÇÐ','±³·®°øÇÐ'],[80,90]])
df

ÀÌ µ¥ÀÌÅÍ ÇÁ·¹ÀÓÀ» ¿¢¼¿¿¡´Ù ³Ö¾îº¸ÀÚ. ÁÖ¼Ò B14¿¡ ³ÖÀ¸·Á¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù. ´Ü¼øÇÏ°Ô df¸¦ rangeÀÇ value¿¡ ÇÒ´çÇß´Ù.

sheet['B14'].value=df

 

index¿Í columns±îÁö Æ÷ÇÔµÇ¾î ¿¢¼¿¿¡ ¹Ý¿µµÇ¾ú´Ù. index¿Í columns¸¦ »©°í ¼ø¼öÇÑ °ª¸¸ ¿¢¼¿¿¡ ¹Ý¿µÇϱâ À§Çؼ­´Â options¸¦ ÀÌ¿ëÇÑ´Ù. options(index=False)¸¦ Ãß°¡Çϸé index ¾øÀÌ ¿¢¼¿¿¡ ¹Ý¿µµÈ´Ù.

sheet['B18'].options(index=False).value=df

¸¶Âù°¡Áö·Î header¸¦ ¾ø¾Ö±â À§Çؼ­´Â header=False¸¦ Ãß°¡ÇÏ¸é µÈ´Ù. index¿Í header ¾øÀÌ µ¥ÀÌÅ͸¸ ¿¢¼¿¿¡ ¹Ý¿µµÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

sheet['B23'].options(index=False,header=False).value=df

 

À̹ø¿¡´Â ¿¢¼¿ÀÇ ³»¿ëÀ» µ¥ÀÌÅÍÇÁ·¹ÀÓÀ» °¡Á®¿Í º¸ÀÚ. ¸Ç óÀ½ µ¥ÀÌÅÍÀÎ B3:E6ÀÇ µ¥ÀÌÅ͸¦ dataframeÀ¸·Î °¡Á®¿Â´Ù°í ÇØº¸ÀÚ. index¿Í columns(header)°¡ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ.

df1=sheet['B3'].options(pd.DataFrame, expand='table').value
df1

 

optionsÀÇ pd.DataFrameÀº dataframeÇüÅ·Πº¯È¯Ç϶ó´Â ¶æÀ̰í expand=¡¯table¡¯Àº B3¼¿·ÎºÎÅÍ ¿À¸¥ÂÊ, ¾Æ·¡ÂÊÀ¸·Î È®ÀåÇØ¼­ ¼±ÅÃÇ϶ó´Â ¶æÀÌ´Ù. index¿Í columns(header)°¡ Á¦´ë·Î ÀνĵǾî dataframeÀÌ ¸¸µé¾îÁø °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. dataframe ¿É¼Ç ¾øÀÌ °°Àº ¸í·ÉÀ» ½ÇÇàÇÏ¸é ¸®½ºÆ®·Î ¸¸µé¾îÁö´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

df2=sheet['B3'].options(expand='table').value
df2
[[
'À̸§', '±¸Á¶¿ªÇÐ', 'ÅäÁú¿ªÇÐ', '¼ö¸®ÇÐ'],
 [
'È«±æµ¿', 84.0, 80.0, 86.0],
 [
'Á¤¾à¿ë', 99.0, 95.0, 90.0],
 [
'À̸ù·æ', 80.0, 85.0, 89.0]]

 

-        ¼¿¿¡ À½¿µ ³Ö±â

¼¿¿¡ À½¿µÀ» ³Ö±â À§Çؼ­ color¸¦ ¼Ó¼ºÀ» ÀÌ¿ëÇÑ´Ù. B3¼¿¿¡¼­ºÎÅÍ ¿À¸¥ÂÊÀ¸·Î È®ÀåÇØ¼­ ¼±ÅÃÇϰí color¸¦ (255,100,100)À¸·Î ¼³Á¤Çß´Ù.

sheet['B3'].expand('right').color=(255,100,100)

 

 

-        ¼¿ Å׵θ® ¼³Á¤

¼¿¿¡ Å׵θ®¸¦ ±×¸®°í ½ÍÀ» ¶§´Â Borders¼Ó¼º°ú Weight¼Ó¼ºÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

sheet.range('B10:D11').api.Borders.Weight = 2

-       

 

4. ¸ËÀ½¸»

xlwings¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀ̽ãÀÇ °ªÀ» ¿¢¼¿¿¡ ¾²°í, ¿¢¼¿ÀÇ °ªÀ» ÆÄÀ̽ãÀ¸·Î °¡Á®¿À°í, À½¿µÀ» ¼³Á¤Çϰųª Å׵θ®¸¦ ¼³Á¤ÇÏ´Â °ÍÀ» ÇØºÃ´Ù. ÀÌ ¿Ü¿¡µµ ¿­ÀÇ ÆøÀ» ¼³Á¤ÇѴٵ簡 ÇàÀÇ ³ôÀ̸¦ ¼³Á¤ÇÏ´Â µîÀÇ ¼³Á¤µµ °¡´ÉÇÏ°í ±×·¡ÇÁ¸¦ ±×¸®°Å³ª ¼±À» ±×¸®´Â µîÀÇ ÀÛ¾÷µµ ÆÄÀ̽ãÀ¸·Î °¡´ÉÇÏ´Ù. ¿¢¼¿¿¡¼­ ÇÏ´Â ¸ðµç ÀÛ¾÷µéÀ» ÆÄÀ̽ãÀ¸·Î ÇÒ ¼ö ÀÖ´Ù°í º¸¸é µÈ´Ù. À̹ø ½Ã°£¿¡´Â ±âº»ÀûÀÎ °Í¸¸ ¼Ò°³Çß´Ù. ÇÊ¿äÇÑ ±â´ÉÀº ±¸±Û¸µÀ¸·Î ã¾Æº¸´Â °ÍÀ» ÃßõÇÑ´Ù. ¸ðµç °ÍÀ» ´Ù ¾Ë°í ÀÖÀ» ÇÊ¿ä´Â ¾ø´Ù. Áß¿äÇÑ °³³ä¸¸ ¾Ë°í ÀÖÀ¸¸é µÈ´Ù. ¿¢¼¿¿¡¼­´Â range°³³äÀÌ Áß¿äÇÏ´Ù. ´ÙÀ½ ½Ã°£¿¡´Â ¿¢¼¿ »ç¿ëÀÚÇÔ¼ö¸¦ ÆÄÀ̽ãÀ¸·Î ¸¸µå´Â °ÍÀ» ¾Ë¾Æº¸°Ú´Ù.

 

-³¡-



  ÃßõÇÏ±â   ¸ñ·Ïº¸±â

Copyright 1999-2023 Zeroboard / skin by zero
±¸Á¶¼³°èÀÇ ¹Ì·¡¸¦ ÁغñÇÏ´Â ¸ðÀÓ [±¸Á¶¼³°è¹Ì·¡Æ÷·³]