📝

CAEのためのpython5(6面視画像をエクセルに貼り付け)

2023/09/14に公開

動機

CAEの結果(形状やコンター図など)から資料を作成する機会6面視の画像を作成することが、
多くあると思います。(僕は多かったです。)
この作業、やってることは単純ですが案外やってみるとめんどくさいです。
こういう作業は、自動化ですね。
ちょっと長くなりそうなので2回に分けて書いていきます。

今回やること

1回目では、6面視の画像を作成しました。今回は作成した画像を新規作成したエクセルに貼り付けていきます。

プログラムの説明

  • まずは、エクセルを操作するために。openpyxlとPillowをインストールします。
pip install openpyxl
pip install Pillow
  • 前回作成したRunクラスを修正します。
  • 6面視画像をのパスとエクセルに貼り付ける位置を関連づけます。
def png_dir_make(self,e):
        #エクセル上で画像がダブらないように位置を指定
        #私の場合は、画像の縦横比が1360×761※画像の配置は縦横比で変わるので調整が必要です。
        temp=[["_Top.png","E9"],["_Left.png","E2"],["_Right.png","E16"],["_Bottom.png","E23"],["_Front.png","B9"],["_Back.png","H9"]]
        return [[os.path.splitext(e.data)[0] + i[0],i[1]] for i in temp]
  • 最後の2行を追加
def Cfile_Make(self,e):
        cfile=os.path.splitext(e.data)[0]+".cfile"
        with open(cfile,'w') as F:
            F.writelines(self.Cfile_str_Make(e))
        self.Ls_Run(cfile)
        #以下を追加
        Xl_insert_img().insert_img(self.png_dir_make(e),"test.xlsx")
	self.Run_app.quit()
  • エクセルを新規作成して画像をリサイズしてから貼り付けています。
class Xl_insert_img():       
    def insert_img(self,img_dir,ExcelName):
        workbook = openpyxl.Workbook()
        for i in img_dir:
            img = Image.open(i[0])
            width, height = img.size
            #エクセルの行高さのデファオルは、1行13.5(ポイント)≒1.3*13.5(ピクセル)
            #今回は7行なので123(ピクセル)
            rate=height/123
            #リサイズと画像の上書き保存
            img.resize((int(width/rate),int(height/rate))).save(i[0])
            #画像挿入、エクセルの保存
            workbook.active.add_image( openpyxl.drawing.image.Image(i[0]), i[1])
        workbook.save(ExcelName)
  • main文(前回と同じ)
    if __name__ == "__main__":
	    app = MyApp()
	    app.mainloop()

使い方

ファイルをドラック&ドロップするとtest.xlsxが作成され,GUIが閉じます。

今後

  • lsprepostで表示できるファイルならcfileのスクリプトを書き換えれば読めるはずです。
  • 何らかのコンター図の資料作りに使えると思います。

Discussion