Excel에서 사사키 노조미를 그리기 with python

【환경】



windows8.1
Excel 2013
python2.7
opencv3

【개요】



사사키 노조미의 사진으로부터 색의 정보를 취득해, Excel의 셀에 칠합니다.

【폴더 구성】



 |---sasaki_excel
     |---sasaki_excel.py
     |---sasaki_nozomi.jpg(사사키 노조미의 이미지)
     |---sasaki_nozomi.xlsx (그리기용 엑셀)

여기의 이미지를 사용했습니다.


【프로그램】



sasaki_excel.py
# -*- coding:utf-8 -*-

import cv2
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 画像読み込み
image = cv2.imread("sasaki_nozomi.jpg")

# エクセルファイル読み込み
wb = load_workbook(filename='sasaki_nozomi.xlsx')
# アクティブなシートを取り出す
ws = wb.active

# アスキーコードを使ってアルファベットのリスト作成
# col_name = ['A','B',...,'Z']
col_name = [chr(i) for i in range(65,65+26)]

# エクセルの列名リスト作成
i = 0
for j in xrange(26, len(image[0])):
    # アルファベットの連結
    col_name.append(col_name[i] + col_name[j % 26])
    if (j + 1) % 26 == 0:
        i += 1
    if len(col_name) == len(image[0]):
        break



for gyo in xrange(len(image)):
    for retu in xrange(len(image[gyo])):
        for rgb in xrange(len(image[gyo][retu])):

            # 赤、緑、青の値を16進数へ変換
            # 16進数にすると'0x**'と変換されるため後ろ2文字を取り出す
            red = hex(image[gyo][retu][0])[2:4]
            # 例えば'0xc'と変換される16進数もあるため、0を連結
            if len(red) == 1:
                red = '0' + red
            green = hex(image[gyo][retu][1])[2:4]
            if len(green) == 1:
                green = '0' + green
            blue = hex(image[gyo][retu][2])[2:4]
            if len(blue) == 1:
                blue = '0' + blue

            # 列と行の幅を変更
            ws.column_dimensions[col_name[retu]].width = 0.3
            ws.row_dimensions[retu].height = 1.5

            # 塗りつぶすセル名を取得
            cell_name = col_name[retu] + str(gyo + 1)
            # セル名をセット
            cell = ws[cell_name]
            # 16進数の数字を文字連結
            color = str(blue) + str(green) + str(red)
            # 塗りつぶし
            cell.fill = PatternFill(patternType='solid', fgColor=color)

# エクセルファイル保存
wb.save('sasaki_nozomi.xlsx')

【결과】





결코 이미지를 붙여 넣은 것은 아닙니다 (웃음)
셀의 너비를 수동으로 조정했습니다.
[2016.5.29 추가]
셀 너비 조정을 수동이 아닌 프로그램에 통합했습니다.

이 프로그램의 응용 프로그램은 두 이미지에 대해 셀의 색상을 비교하여 실수를 찾을 수 있습니다.

【참고 사이트】



Python에서 Excel 파일을 괴롭히는 openpyxl
아스키 코드 표

【다른 언어판】



Node.js판은 이쪽
Ruby판은 이쪽

좋은 웹페이지 즐겨찾기