ååãPythonããExcelãã¡ã€ã«ãæäœããæ¹æ³ã玹ä»ãããããã§ãä»åã¯ãæ¢åã®è«æ±æžãé åæžã®ãã©ãŒãããã«ããŒã¿ãèªåå ¥åããæ¹æ³ã玹ä»ããããä»ã§ã¯å€§æµã®ä»äºã«ãããŠExcelã§æžé¡ãäœæããäœæ¥ãçºçãããPythonã䜿ã£ãŠäœæ¥æéã®ççž®ã«ææŠãããã
ä»åäœãããã°ã©ã ã«ã€ããŠ
ããã§ããã®ã©ã€ãã©ãªãå©çšããŠãè«æ±æžãšçŽåæžã®äºã€ã®Excelãã¡ã€ã«ãèªåçã«çæããããã°ã©ã ãäœã£ãŠã¿ããã
å ·äœçã«ã¯ã以äžã®æé ã§åŠçãèªååããŠã¿ããã
(1) Excelã§è«æ±æžãšçŽåæžã®ãã³ãã¬ãŒããã¡ã€ã«ãäœæãã
(2) éé¡ãåæ°ãªã©ãèšããçŽåç©äžèЧãã¡ã€ã«ãäœã
(3) çŽåç©äžèЧãã¡ã€ã«ãèªã¿èŸŒãã§ãè«æ±æžãšçŽåæžã®Excelã«å·®ã蟌ãã§æ°èŠä¿åãã
ãªããããã°ã©ã ããã³ãExcelã®ãã³ãã¬ãŒããã¡ã€ã«äžåŒã¯ããã¡ãããããŠã³ããŒãã§ããã
ãŸãã¯Excelã§è«æ±æžãšçŽåæžã®ãã³ãã¬ãŒããäœãã
ããã§ã¯ãæåã«ãã³ãã¬ãŒããäœæããããããã§äœãã®ã¯ãè«æ±æž(invoice.xlsx)ãšçŽåæž(delivery_slip.xlsx)ã ããšããããã以äžã®ãããªäžè¬çãªãã®ãæºåããŠã¿ããæè¿ã§ã¯ãäŒç€Ÿã®æã¡å³ãåæ ããåæ§çãªè«æ±æžã»çŽåæžãå¢ããŠããã®ã§ããããå©ãå°ã«Excelãé§äœ¿ããŠãªãªãžãã«ãã³ãã¬ãŒããäœãããšãã§ãã ããã
çŽåç©ã®äžèЧãäœæããã
次ã«ãçŽåç©ã®äžèŠ§è¡šããlist.xlsxããšããååã§äœæããããä»åã®è«æ±æžã»çŽåæžã§ã¯ã8è¡ã®ã¹ããŒã¹ããçšæããªãã£ãã®ã§ãããã«åãŸãããã«é©åœã«ããŒã¿ãå ¥åããŠã¿ããã
ããã°ã©ã ãäœãã
ãã³ãã¬ãŒããšããã³ãã¬ãŒãã«æµã蟌ãããŒã¿ãçšæããããããããããŒã¿ããã³ãã¬ãŒãã«æµã蟌ãPythonã®ããã°ã©ã ãäœã£ãŠã¿ããããªããPythonããExcelãã¡ã€ã«ãæäœããã©ã€ãã©ãªãopenpyxlãã¯ååã®å 容ãåèã«ã€ã³ã¹ããŒã«ãããã®ãšããã
ãããŠã以äžã®ããã°ã©ã ããgen_invoice.pyããšããååã§ä¿åãããã
import openpyxl, pprint
from datetime import datetime
# ãã¡ã€ã«åã®æå®ãªã© --- (*1)
file_list = "list.xlsx" # çŽåç©äžèЧ
file_invoice= "invoice.xlsx" # è«æ±æžã®ãã³ãã¬ãŒã
file_delivery = "delivery_slip.xlsx" # çŽåæžã®ãã³ãã¬ãŒã
file_out_iv = "out-invoice.xlsx" # çæããè«æ±æž
file_out_ds = "out-delivery_slip.xlsx" # çæããçŽåæž
# çŽåç©äžèЧãèªã¿èŸŒã --- (*2)
wb = openpyxl.load_workbook(file_list, data_only=True) # æ°åŒã§ãªãå€ãåãåºãå Žå
ws = wb["sheet1"] # sheet1ãéžã¶
name = ws["A1"].value # å®åãåŸã
list_data = ws["A3:F10"] # ä»»æã®ç¯å²ãååŸ
# è«æ±æžãšé åæžã®ãã³ãã¬ãŒããèªã --- (*3)
wb_iv = openpyxl.load_workbook(file_invoice)
ws_iv = wb_iv.active
wb_ds = openpyxl.load_workbook(file_delivery)
ws_ds = wb_ds.active
# å®åãšæ¥ä»ãæžã蟌ã --- (*4)
cdate = datetime.now().strftime("%Y/%m/%d")
ws_iv["A3"].value = name
ws_iv["F2"].value = cdate
ws_ds["A3"].value = name
ws_ds["F2"].value = cdate
# çŽåç©ãæžã蟌ã --- (*5)
for y, row in enumerate(list_data):
for x, cell in enumerate(row):
if (cell is None) or (cell.value is None): continue
v = cell.value
ws_iv.cell(row=12+y+1, column=0+x+1, value=v)
ws_ds.cell(row=12+y+1, column=0+x+1, value=v)
# æ°ããä¿åãã --- (*6)
wb_iv.save(file_out_iv)
wb_ds.save(file_out_ds)
print("ok")
ããã°ã©ã ãå®è¡ããã«ã¯ãã³ãã³ãã©ã€ã³ãã以äžã®ããã«å ¥åããŠ[Enter]ããŒãæŒããã
# Windows
python gen_invoice.py
# macOS
python3 gen_invoice.py
ãããšããã³ãã¬ãŒãã«çŽåç©äžèЧ(list.xlsx)ã«æå®ããããŒã¿ãæµã蟌ãŸããŠããout-invoice.xlsxããšãout-delivery_slip.xlsxãã«ä¿åããããå®åãæ¥ä»ãçŽåç©äžèŠ§ãæžãæãã£ãŠããããšã確èªãããã
ããã§ã¯ãããã°ã©ã ã確èªããŠã¿ãããããã°ã©ã ã®(ïŒ1)ã®éšåã§ã¯ããã¡ã€ã«åãæå®ããŠãããããã°ã©ã ã®èšå®ãªã©ã¯ããã®ããã«ããã°ã©ã åé ã«ãŸãšããŠæžããŠããã®ãéåã ã
(ïŒ2)ã®éšåã§ã¯ãçŽåç©äžèЧã®Excelãã¡ã€ã«ãèªã¿èŸŒãã§ããããã¡ã€ã«ãèªã¿èŸŒãéãdata_only=Trueãšãããªãã·ã§ã³ãæå®ãããšãã»ã«ã«æ°åŒãå ¥ã£ãŠããå Žåãæ°åŒã§ã¯ãªãèšç®çµæãååŸã§ããããã«ãªãã®ã§äŸ¿å©ã ããããŠãws["A1"].valueã®ããã«ã»ã«åãæå®ããŠå€ãååŸã§ãããws["A3:F10"]ã®ããã«ããŠãè€æ°ã»ã«ç¯å²ãååŸããããšãå¯èœã ã
(ïŒ3)ã§ã¯ãã³ãã¬ãŒããã¡ã€ã«ãèªã¿èŸŒãã(ïŒ4)ã§ã¯å®åãšæ¥ä»ã®éšåãæžãæãããæ¥ä»ã¯ãããã°ã©ã ãå®è¡ããæ¥ãæ¿å ¥ããããããŠã(ïŒ5)ã®éšåã§ã¯ãçŽåç©ã®äžèЧããŒã¿ãforæ§æã䜿ã£ãŠäžã€ãã€æžã蟌ããæåŸã«ã(ïŒ6)ã®éšåã§ãExcelãã¡ã€ã«ãä¿åããã
ã¯ãŒã¯ããã¯ã®èªã¿èŸŒã¿ãšä¿å
ããã§ã¯ãç°¡åã«openpyxlã®äœ¿ãæ¹ããŸãšããŠã¿ãããã©ã€ãã©ãªãå©çšããã«ã¯ãimportæã以äžã®ããã«äœ¿ãã
# ã©ã€ãã©ãªã®åã蟌ã¿
import openpyxl
ãããŠãExcelã®ããã¯ãèªã¿èŸŒãã«ã¯ãäžèšã®ããã«ãload_workbook()ã䜿ããä¿åã«ã¯ãwb.save()ã䜿ãã
# ã¯ãŒã¯ããã¯ã®èªã¿èŸŒã¿
wb = openpyxl.load_workbook("ãã¡ã€ã«å.xlsx")
# ã¯ãŒã¯ããã¯ã®ä¿å
wb.save("ä¿åãã¡ã€ã«å.xlsx")
ã»ã«ã®èªã¿åããšå€ã®èšå®
ã»ã«ã®å€ãæäœããåã«ãã¯ãŒã¯ããã¯ã®ãªããžã§ã¯ããããã¯ãŒã¯ã·ãŒãã®ãªããžã§ã¯ããååŸããå¿ èŠãããã
# ã·ãŒãåãæå®ããŠã¯ãŒã¯ã·ãŒããåŸã
sheet = wb["ã·ãŒãå"]
# ã¢ã¯ãã£ãã«ãªã£ãŠããã¯ãŒã¯ã·ãŒããåŸã
sheet = wb.active
ãããŠãã¯ãŒã¯ã·ãŒãã®ãªããžã§ã¯ããåŸãããããã»ã«åãæå®ããŠå€ãååŸã»èšå®ã§ããã
# A1ã®ã»ã«ã«ãããã«ã¡ã¯ããšèšå®
sheet["A1"].value = "ããã«ã¡ã¯"
# A1ã®ã»ã«ã®å€ã衚瀺ãã
print( sheet["A1"].value )
ãã®æãã»ã«ã®äœçœ®ãæ°å€ã§æå®ããããšãã§ãããåŒæ°ã«äžãããã©ã¡ãŒã¿ã ããè¡ãrowãåãcolumnãèšå®ããå€ãvalueã ã
# A1ã®ã»ã«ã«å€ãèšå®
sheet.cell(row=1, column=1, value="ããã«ã¡ã¯")
ä»å玹ä»ããããã°ã©ã ã§äœ¿ã£ãã®ã¯ãããã ããªã®ã§ãããã»ã©é£ããããšã¯ãªãã ããã ãªããopenpyxlã©ã€ãã©ãªã®ããã¥ã¢ã«ã以äžã«çšæãããŠããããããèŠãã°ãã¹ã¿ã€ã«ãªã©ãæäœã§ããããšãåããã
openpyxl Docs
[URL] https://openpyxl.readthedocs.io
ãŸãšã
以äžãä»åã¯ãããããè«æ±æžãšçŽåæžã®Excelãã¡ã€ã«ãèªåçæããããã°ã©ã ã玹ä»ããã倧åã®äœæ¥ãé»ååãããŠãããšããŠãã倧ãªãå°ãªããè«æ±æžãé åæžã®äœæäœæ¥ãçããã®ã¯ä»æ¹ããªããããã§ãæ¯ææ±ºãŸãåã£ãåŠçã¯ãã§ããã ãèªååãããªããäœæ¥æéãççž®ããã ãã§ãªããå¿ççã¹ãã¬ã¹ãå°ãªããªãã ãããæ±ºãŸãåã£ãåŠçã°ããã§ãããã»ã©é£ããéšåã¯ãªãã®ã§èªååã«ææŠããŠã¿ããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠããã




