將 JSL 結果自動化並自定義到 PowerPoint 中的方法<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好 ,
@。 雖然我已經成功地實現了整個分析的自動化,但我對如何自動化最後一步(即將 JSL 生成的圖形和表格保存/自定義到我當前擁有的現有 Power Point 演示文稿中)感到有些挑戰。 我知道這個問題之前在以下帖子中以不同的方式提出過:
- 將分析保存到 PowerPoint
- 如何使用 jsl 自動將圖表從 JMP 保存到 powerpoint
- 開動你的腦筋...導出到 PowerPoint 的腳本
- 如何將 JMP 12 的 JMP 輸出保存到組織的 PowerPoint 模板
- 期刊PowerPoint導出
以上是我認為有幫助的一些最相關的帖子,但我認為 (5) 是最相關的,但尚未得到答复。 以冗餘為代價——有人能提供處理這種情況的最佳方法嗎? 為了進一步解釋 - 假設我有一個自定義報告 - 每張幻燈片都有不同類型的圖形和文本。 大多數圖形/圖表是在我的 JSL 腳本中生成的。 然而,讓 JSL 以每張幻燈片所需的自定義格式將圖表導出到演示文稿中的最佳方法是什麼? 我能想到的選項是:
- 將 JMP 數據表保存為 Excel 工作表,然後
- 在 Excel 中手動生成繪圖並將其複制粘貼到 Powerpoint(目前正在完成) - 效率極低
- 編寫一個 VBA 宏來組合 Excel 工作表並生成圖表並插入到 Powerpoint 中 - 我不精通 VBA - 不想採用這條路線
- 在 JSL 中編寫 VBA 代碼 - 再次出於與上述相同的原因 - 不想採用這條路線
- 將數字保存在
- 報告——然後呢? 我知道 JSL 可以將圖形導出到我們想要的模板中的 PowerPoint - 但這是否允許任何格式 - 如果可以,請分享資源或代碼片段
- 期刊 - 然後呢? 我應該手動將數字複製粘貼到 Power Point 中嗎?
我希望使用 JSL 來執行此操作並將整個報告保存在 JSL 中,而不是使用 Excel 。 請好心指教。
最好的
烏代
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法你好,我在 Windows 上安裝 Python 後運行了上面的代碼。但不知怎的,這不會加載任何內容,但會打開相同的 example.pptx。 我看到它在目錄中創建了 example.png 。
你能對這個問題進行一些調試嗎?
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法我收到了有關這篇文章的通知,自從三年過去了,我想我也更新了我的回复。此後,我構建了多個用於創建 PPT 的工具,並且我確實遵循步驟 1-4。對我來說,第 5 步是個例外,我使用了一個名為 pptx-ppt 的 Python 庫。看起來其他人已經發布了其他幾種替代方案(顯然沒有人喜歡 VBA)。使用 Python 的好處在於它是開源的,並且 JMP 14 中有新的 Python Connection 掛鉤,因此您可以直接從 JSL 運行 Python。下面的示例代碼。
Names Default to Here(1);
//Created by msharp - 6/26/18
//Example script to generate a PPT presentation from a JSL report
//This takes advantage of python-pptx and the new Python hooks in JMP 14
//python-pptx installation:
//http://python-pptx.readthedocs.io/en/latest/user/install.html
//python-pptx quick start guide:
//http://python-pptx.readthedocs.io/en/latest/user/quickstart.html
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate( Y( :height ), X( :weight ) );
//Save Report as Picture
dir = "C:\TEMP\";
file = "example.png";
biv << Save Picture(dir || file, "png");
//Clean Up
biv << Close Window();
close(dt, nosave);
//Create PPT w/ Python
Python Init();
plog = Python Execute({dir, file}, {img_path, left, top, height},
"\[
from pptx import Presentation
from pptx.util import Inches
img_path = dir + file
prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
left = top = Inches(1)
pic = slide.shapes.add_picture(img_path, left, top)
left = Inches(5)
height = Inches(5.5)
pic = slide.shapes.add_picture(img_path, left, top, height=height)
prs.save(dir + 'example.pptx')
]\"
);
Python Term();
//Open PPT
open(dir || "example.pptx");回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法如果我理解正確的話,可以說我有 500 個圖表,並且想將所有這些圖表放入某個預定義模板中的 ppt 中。為了實現這一點,我必須修改您的代碼並多次重複這些 insert 和 pic1.. 命令。如果是這樣的話,看起來效率很低。但也可能是錯誤的。回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法親愛的烏代。
實際上,通過 Excel 創建 Powerpoint 是一種不錯的方法 - 無論數據來自何處。 事實上,網絡上有無數關於如何執行此操作的手冊。 不幸的是,大多數手冊都存在一些不足,因為這些手冊的作用超出了實際要求。 然後調整這段代碼將成為一個漫長的路要走。 為了避免這樣的問題,有一個軟件叫幻燈片製作可用,使其能夠從任何 Excel 靈活創建整個 Powerpoint 演示文稿,而無需一行 VBA。
因此,一種方法是使用 JMP 導出並基於此數據創建公式和圖表,以便可以隨時更新此原始數據,而無需重寫公式。 然後可以使用 Powerpoint 演示文稿作為模板或讓軟件從頭開始創建它。然後,該軟件允許它定義 Excel 中的哪些數據需要進入 Powerpoint 中的哪個圖表/表格/形狀。 如果存在某種重複(例如,為多個場景創建相同的幻燈片),那麼也可以對其進行定義。 如果通過 Excel 中的公式創建底層邏輯,甚至可以創建數據驅動的標題、評論甚至整個故事情節。 然後只需單擊一下即可自動創建 Powerpoint 演示文稿。
所以這就是我推薦的方式;)
乾杯
延斯
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法我發現這非常有用,並圍繞它創建了一個 bash 包裝腳本,我從 cygwin bash shell 運行該腳本以將 png 自動加載到具有正確寬高比的 powerpoint 中:
文件:png2ppt
#!/bin/bash
TCODE=`date +%s`
LIST=`ls -1rt *.png *.PNG`
if [[ $LIST != "" ]] ; then
# p3icli Syntax, Help: http://p3icli.sourceforge.net/p3icli_help.html
# http://p3icli.sourceforge.net/jsl_example.html
# http://p3icli.sourceforge.net/
WPATH=`cygpath -w $PWD`'\'
rm -f $TCODE.p3icli
# no cap1
echo 'open template C:\Programs\cygwin\usr\local\bin\portfolio.pot' >> $TCODE.p3icli
picX=674
picY=378 #388 #348
for F in $LIST ; do
if [[ -f $F ]] ; then
res=`pngcheck $F | cut -f2 -d'(' | cut -f1 -d','`
#res=`exiv2 $F | grep -F 'Image size :' | cut -f2 -d':'`
resX=`echo $res | cut -f1 -dx`
resY=`echo $res | cut -f2 -dx`
let aspect=$resX*10000/$resY
acutoff=17771 #9.33/5.25=1.77
if [[ $aspect -gt $acutoff ]] ; then
scale=`awk "BEGIN {printf \"%.6f\n\", $resX/$picX}"`
else
scale=`awk "BEGIN {printf \"%.6f\n\", $resY/$picY}"`
fi
X=`awk "BEGIN {printf \"%.0f\n\", $resX/$scale}"`
Y=`awk "BEGIN {printf \"%.0f\n\", $resY/$scale}"`
TITLE=`echo $F | rev | cut -c5-99 | rev | tr '_' ' '`
echo "title "\"$TITLE\" >> $TCODE.p3icli
echo "pic1 $WPATH$F" >> $TCODE.p3icli
echo "pic1 size $X,$Y" >> $TCODE.p3icli
echo "sleep 155" >> $TCODE.p3icli
echo "duplicate template # create and move to next slide" >> $TCODE.p3icli
fi
done
echo "save as presentation $WPATH$TCODE.ppt" >> $TCODE.p3icli
echo "sleep 500" >> $TCODE.p3icli
echo "kill ppt save" >> $TCODE.p3icli
cmd /C p3icli -X -l $WPATH$TCODE".log" $WPATH$TCODE".p3icli"
rm -f $TCODE.p3icli
fi
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法許多年前,我出色的丈夫創建了一個程序 p3icli,可以將圖片加載到 PowerPoint 中。p3icli 這個名字是它的功能的縮寫,磷華爾磷點磷圖片我插入C命令L伊內我界面。該程序是開源的,可以從下面的第一個鏈接下載
P3ICLI(PowerPoint 圖片插入命令行界面) 。 如果您決定下載它,我建議您使用二進制發行版。
我寫了具體的 JSL 示例,位於http://p3icli.sourceforge.net/jsl_example.html 。這包括:
- 特製 PowerPoint 模板的鏈接,其中包含 3 張不同的幻燈片,用於定義最終演示文稿的佈局
- 示例 JSL 腳本
- 打開 JMP 示例數據 Iris.jmp,
- 從 3 個平台創建並保存 JMP 輸出:平行圖;散點圖矩陣(splom) 和 Oneway(4 個圖,每個響應與物種)
- 編寫 p3icli 命令來創建標題頁並將繪圖加載到 PPTX 模板,
- 使用 JSL 命令運行 p3icli運行程序()
- 在 JSL 中創建並運行的文本文件顯示在此鏈接中,最後
- 指向生成的 PowerPoint 文件的鏈接。
p3icli 命令相當簡單,例如
- 插入幻燈片#從模板文件路徑
- 標題“您提供文本”
- 圖片# 圖片路徑{此命令將圖片定位在頁面上}
- 帽# “您提供文本”{此命令將文本放置在模板中定義的文本框中}
我和許多同事已經使用它在幾秒鐘內加載了 100 個圖表。如果形狀與圖片大小(像素)不成比例,則在 PPTX 形狀中嵌入圖片可能會看起來扭曲。 p3icli 具有調整大小的命令,但是,通常,我使用兩種方法之一來確保不失真:(1) 使用JSL 命令調整FrameBox 的大小或在保存之前調整窗口的大小,或者(2) 使用類似於之前響應的內容製作一個新窗口並將該窗口保存為圖形,並使用每張幻燈片具有一個形狀的模板。
這確實需要閱讀一些有關如何創建模板的 p3icli 文檔。 這是一個提示。 保存 PPTX 模板。 打開它。在每個形狀上,右鍵單擊並選擇設置形狀格式。查看替代文本。每個形狀都有一個標籤:pic1、pic2 等。此外,每個要放置文本的形狀,替代文本將為 cap1、cap2 等。所以要點是定義一個佈局,然後保存圖形並編寫有關如何放置的命令哪些圖表去哪裡。請注意,您可以擁有帶有徽標和備份文檔的模板。p3icli 命令複製源格式將保留精美的徽標和顏色等。請注意,如果您有一個包含 4 個形狀的模板,而您只填充了 2 個,則 2 個未使用的形狀不會出現。
這種方法實現了很大的靈活性和定制性,並為 p3icli 用戶節省了數千小時的時間,使用比 VBA 簡單得多的命令手動加載和編輯 PPTX 演示文稿。
這樣,p3icli就有了GUI,它被稱為p3i,可以在sourceforge.net網站上找到。
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法@msharp :
如果我理解正確並且我將採用你的方法(1) - 查看下面的示例代碼:
NamesDefaultToHere(1);
dt1 = Open("$SAMPLE_DATA/Big Class.jmp");
g1 = Expr(dt1 << Bivariate( Y( :height ), X( :weight ) ));
dt2 = Open("$SAMPLE_DATA/Bands Data.jmp");
g2 = Expr(dt2 << Distribution( Nominal Distribution( Column( :Name( "Banding?" ) ) ) ));
win = NewWindow("Reports from Two Tables", HListBox(g1, g2));
- 禮貌 :伊恩@JMP
每次 - 我將圖表發送到報告 - 它都會創建一個新報告,然後我需要使用所有這些報告的引用將它們組合成窗口的水平集合或垂直集合?
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法我沒有做太多關於將腳本自動化到 PowerPoint 的工作,但我已經考慮過好幾次了。這是我要採取的步驟:
1) 編寫一個 JSL 腳本來生成數據、分析數據並放入可供用戶編輯的報告中。(過濾異常值、引腳標籤等)
注意:如果構建正確,我通常會在此處停止並讓用戶拍攝快照以及創建 PowerPoint 之類的事情。無論如何,每個人都喜歡他們的演示,而接下來的步驟並不總是能滿足我當時的投資回報率。
2) 將報表組織成最終用戶可以理解的選項卡或其他 JSL 報表結構,將變成單獨的 PowerPoint 頁面。
3) 向報告添加一個按鈕,用戶在 JMP 中進行編輯後將生成 PowerPoint。
4) 將 JSL 選項卡導出為圖片。
5) 然後讓 JSL 運行 PowerPoint VBA 腳本,該腳本將加載圖片並生成演示文稿。
有很多程序(不僅僅是 JSL)可以生成 .ppts。我的經驗是它們都達不到要求。如果您想要最大程度的自定義來製作最好的報告,最好只使用 VBA for PowerPoint。它是一種腳本語言,與其他腳本語言一樣,它能很好地完成工作。也許您無法使用 VBA for PowerPoint 創建出色的統計分析插件(最好將其留給 JSL),但是自定義 .ppt?是的,它會做得很好。
回复:將 JSL 結果自動化和自定義到 PowerPoint 中的方法姆夏普, PM羅茲,克雷格@JMP - 有什麼想法嗎 ?