将 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 - 有什么想法吗 ?