JMPのグラフをPowerPointやWordにエクスポートする、もっと良い方法がないか調べてみました。ネイティブのエクスポートは使い勝手が悪く、もし成功した方がいらっしゃいましたら、ぜひ改善してみたいと思います。PowerPointでマクロを記録して修正することで同様の作業は可能ですが、もっと良い方法があればと思っています。
プレゼンテーション用にpython-pptxを使い始めました。かなり高性能ですが、ドキュメントが少し不足しています。PowerPointのレイアウトを作成して汎用プレゼンテーションとして保存し、JMPのウィンドウでユーザー入力を使ってPythonコードを作成するのが好きです。
私の PowerPoint プレゼンテーション スクリプトの最初の部分の例:
pycode = Eval Insert(
"\[from pptx import Presentation
from PIL import Image, ImageEnhance
import io
p = Presentation(r'^template_path^')
slid = p.slides[0]
mom = slid.shapes[1]
slid.shapes.title.text = '^pres^'
mom.text = '^name^'
for x in range(^Char( total_items )^):
print("""adding placeholder slides....
""" + str(x + 1) + ' out of ^Char( total_items )^')
p.slides.add_slide(p.slide_layouts[6])
]\"
);
その後、私が持っているサンプル検査画像のフォルダをループ処理します。グラフを作成してjpgファイルとして保存することもできます。以下のコードは、条件テーブルから情報を追加し、フォルダからjpgファイルのみを取得し、暗い画像の一部を補正してからスライドに表示します。選択肢は基本的に無限です。
For Each( {v, i}, sub_folders,
condition = Left( Right( v, 4 ), 2 );
pycode ||= Eval Insert(
"slid = p.slides[^Char( i )^]
slid1 = slid.placeholders[10]
slid2 = slid.placeholders[11]
slid3 = slid.placeholders[12]
slid4 = slid.placeholders[13]
slid5 = slid.placeholders[14]
slid6 = slid.placeholders[15]
slid7 = slid.placeholders[16]
slid8 = slid.placeholders[17]
slid.shapes.title.text = \!"\!"\!"^v || Try( \!": \!" || cond_array[condition], \!"\!" )^\!"\!"\!"\!N"
);
pics = Filter Each( {value, index}, Files In Directory( thefolder || v ),
And( Ends With( Lowercase( value ), "jpg" ), !Contains( value, "_APA_" ) )
);
pycode ||= Eval Insert(
"slid1.insert_picture(r'^thefolder || v || \!"/\!" || pics[1]^')
slid2.insert_picture(r'^thefolder || v || \!"/\!" || pics[3]^')
img = Image.open(r'^thefolder || v || \!"/\!" || pics[5]^')
enh = ImageEnhance.Brightness(img)
img = enh.enhance(3)
img2 = io.BytesIO()
img.save(img2, 'JPEG')
slid3.insert_picture(img2)
img = Image.open(r'^thefolder || v || \!"/\!" || pics[7]^')
enh = ImageEnhance.Brightness(img)
img = enh.enhance(2)
img2 = io.BytesIO()
img.save(img2, 'JPEG')
slid4.insert_picture(img2)
slid5.insert_picture(r'^thefolder || v || \!"/\!" || pics[2]^')
slid6.insert_picture(r'^thefolder || v || \!"/\!" || pics[4]^')
img = Image.open(r'^thefolder || v || \!"/\!" || pics[6]^')
enh = ImageEnhance.Brightness(img)
img = enh.enhance(3)
img2 = io.BytesIO()
img.save(img2, 'JPEG')
slid7.insert_picture(img2)
img = Image.open(r'^thefolder || v || \!"/\!" || pics[8]^')
enh = ImageEnhance.Brightness(img)
img = enh.enhance(2)
img2 = io.BytesIO()
img.save(img2, 'JPEG')
slid8.insert_picture(img2)
print('^Char( i )^ of ^Char( Length( sub_folders ) )^ complete....')\!N"
);
);
pycode ||= Eval Insert( "\[p.slides.add_slide(p.slide_layouts[4])
p.save(r'^pptx_savefile^')
]\" );
画像の挿入を簡素化するためにプレースホルダーを使用していますが、画像を直接追加し、サイズと位置を指定することもできます。