※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

PythonのopenpypxモジュールでExcelいじり


2017年 07月 13日

Pythonには、様々なモジュールがある。
それを1つずつ毎週紹介すると何年も話が持ちそうだが、こちらの気力が持ちそうにない。実際、それほどたくさんのモジュールが存在するのだ。

Excelをいじるためのモジュールもいくつかあるようなのだが、今回はopenpyxlを紹介する。

openpyxl Documentationという立派なドキュメントがある。
英語のドキュメントで、311ページもあるので、真面目に読むのは大変だ。

A Python library to read/write Excel 2010 xlsx/xlsm filesがもう少し楽そうなドキュメントである。

実際には、東邦大学理学部のPythonからExcelファイルをいじるopenpyxl
あたりを出発点としてあれこれ探して次のプログラムをでっち上げただけである。


#!/usr/bin/env python

from PIL import Image, ImageColor
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter

def coltostr(coltuple):
r, g, b = coltuple
a = 255
return format(((a*256+r)*256+g)*256+b, '08X')

def image2excel(imagefile,excelfile,sheetname):
im = Image.open(imagefile)
width, height = im.size

wb = openpyxl.load_workbook(excelfile)
sheet = wb.get_sheet_by_name(sheetname)

# セルサイズの調整
for x in range(0,width):
sheet.column_dimensions[get_column_letter(x+1)].width = 1
for y in range(0,height):
sheet.row_dimensions[y+1].height = 5.7

# 画像ファイル ⇒ Excelワークシート
for x in range(0,width):
for y in range(0,height):
colstr = coltostr(im.getpixel((x,y)))
cell = sheet.cell(row=y+1, column=x+1)
cell.fill = PatternFill(fill_type='solid',fgColor=colstr)

wb.save(excelfile)
im.close()

image2excel("アンパン.jpg","アンパン.xlsx","アンパン")