ie_test
2018年7月22日日曜日
xlsxwriter でエクセル資料作り
# 目的 レコメンドの結果としてレコメンドアイテムの写真を貼り付けた資料などを作ることがある。その際に python の xlsxwriter モジュールが使えるかなということで紹介。 # コード説明 説明は以下のコードの下に記載。 ``` #coding:utf-8 import os # need pip install. import xlsxwriter # PIL install command ( $pip install pillow ). import PIL.Image as img def get_image_size( image_path ): image_data = img.open( image_path ) size = image_data.size image_data.close() return size def excel_write(): result_fpath = "test.xlsx" sheet_name = "item_seet" wb = xlsxwriter.Workbook( result_fpath ) ws = wb.add_worksheet( sheet_name ) # vba と違ってインデックスは 0 始まりなことに注意せよ. ws.set_column( 0, 11, 28 ) # 0 列目から 11 列目までの横幅を 28.0 に設定 x_cell_len, y_cell_len = 200, 200 row_cell_num = 12 # 画像の分 + その画像の説明文字列の分を行としてとる。 col_offset = 1 for cust_i, mem_id in enumerate(mem_id_list): # 会員番号がそのままディレクトリ名になっている。 pic_dir = os.path.join( data_dir, mem_id ) row = cust_i * row_cell_num ws.write( row, 0, mem_id ) image_row = row + 1 for item_j, fpath in enumerate(os.listdir(pic_dir)): image_path = os.path.join( pic_dir, fpath ) x_image, y_image = get_image_size( image_path ) x_scale, y_scale \ = float(x_cell_len)/x_image, float(y_cell_len)/y_image col = item_j + col_offset ws.write( row, col, fpath ) ws.insert_image( image_row, col, image_path, {'x_scale': x_scale, 'y_scale': y_scale } ) wb.close() ``` まず出力するエクセルファイルを wb = xlsxwriter.Workbook( result_fpath ) で作成. 書き込むエクセルシートをws = wb.add_worksheet( sheet_name ) で追加。 ws.write( row, col, s ) : ws シートの行 row, 列 col に文字列 s を書き込む( row, col は vba と違って 0 始まりなので注意せよ。 ws.insert_image( row, col, image_path, {'x_scale': x_scale, 'y_scale': y_scale } ) : ws シートの行 row, 列 col を左上として image_path にある画像ファイルを貼り付ける。 x_scale, y_scale はそれぞれ x, y 方向に元の画像の何倍にするかを設定できる。 最後に wb.close() でブックを閉じるとファイルの書き込みが確定する。 # 課題 もともとあるエクセルファイルを開いて編集などは難しいのではないかと思う。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿