
###状況・到達目標
PythonのライブラリOpenpyxlを使ってExcelファイルの編集をしようとしています。
動画から切り抜いた大量の画像約200枚(1枚320×180)を事前に用意しました。
それらを一度ビットマップ化してから各セルに対応する色を塗りつぶすことでExcelでドット絵を描いています。
このようにして、用意した大量の画像を順にドット絵化して、映画のフィルムのようにエクセル上に並べていきたいと思っています。
###該当のソースコード
Python
1# -*- coding:utf-8 -*- 2 3import cv2 4import glob 5from string import ascii_uppercase as AtoZ 6from openpyxl import load_workbook 7from openpyxl.styles import PatternFill 8 9image_path = '用意した画像の保存パス' 10#用意した画像の枚数 11number = 200 12 13''' 14エクセルの初期設定 15ビットマップ化したものを各セルに塗りつぶすためにセルの形を変形 16''' 17image = cv2.imread(image_path + '0.jpg') 18 19# エクセルファイル読み込み 20wb = load_workbook(filename='test.xlsx') 21# アクティブなシートを取り出す 22ws = wb.active 23 24# エクセルの列名リスト作成 25col_name = list(AtoZ) # 'A'~'Z' 26for i in range(len(image[0]) - 26): # 'AA'~ 27 col_name.append(AtoZ[i // 26] + AtoZ[i % 26]) 28 29for col in range(len(image[0])): 30 # 列の幅を変更 31 ws.column_dimensions[col_name[col]].width = 0.3 32 33 for row in range(len(image) * number): 34 # 行の高さを変更 35 ws.row_dimensions[row].height = 1.5 36 37 38''' 39各セルの塗りつぶし 40''' 41images = glob.glob(image_path + '*.jpg') 42 43next_row = 0 44count = 0 45 46for img_path in images: 47 image = cv2.imread(img_path) 48 49 for row in range(len(image)): 50 for col in range(len(image[row])): 51 # 赤、緑、青の値を青、緑、赤の順に16進数2桁ずつの文字列へ変換 52 red, green, blue = image[row][col] 53 color = '%02x%02x%02x' % (blue, green, red) 54 55 # 塗りつぶすセル名を取得 56 cell_name = col_name[col] + str(row + 1 + next_row) 57 # セル名をセット 58 cell = ws[cell_name] 59 # 塗りつぶし 60 cell.fill = PatternFill(patternType='solid', fgColor=color) 61 62 count += 1 63 64 next_row = count 65 66wb.save('test.xlsx')
###発生している問題
保存されたExcelファイルを開こうとすると
'test.xlsx'の一部の内容に問題が見つかりました。可能な限り回復しますか?ブックの発行元が信頼できる場合は、「はい」をクリックしてください。
と出ます。
回復を試みても何も編集されていない状態になります。
上記のプログラム実行時には何もエラーが出ていません。
おそらく保存する部分が上手くできていないのだと思われます。
###試したこと
変換元の画像が200枚ではファイルサイズが大きすぎるのではないかと思い、5枚でやってみたところ上手く保存できていました。
しかし、15枚ではうまく保存できていませんでした。
また、変換元の画像をさらにリサイズしたものでも上記と同じ結果となり、画像枚数が増えると保存ができていないようでした。
###補足情報
開発環境
-Windows10(64bit)
-Excel2016
-Python3.6.0(Anaconda4.4.0(64bit))
-Openpyxl2.5.0a3




回答2件
あなたの回答
tips
プレビュー