编者按:此文件是一个文件交换推荐商品
该函数使用ActiveX接口将Matlab图形窗口或Simulink模型以元文件格式保存到金宝appPowerpoint文件中。首先将图形或模型复制到Windows剪贴板,启动Powerpoint,添加新的空白幻灯片,粘贴图形/模型,保存文件,关闭Powerpoint。如果Powerpoint文件不存在,则创建一个新的Powerpoint文件。一个可选的输入参数允许您在创建幻灯片时为其添加一个唯一的标题。当必须在Powerpoint中插入大量图形时,例如在FOR循环中,这个例程非常方便。它也是一个很好的例子,如何使用ActiveX移动Matlab图形到其他Windows程序。
2.2版本允许在不显示PPT的情况下在后台安静地保存图形。
马克。布朗(2021)。saveppt(//www.tatmou.com/matlabcentral/fileexchange/340-saveppt),MATLAB中心文件交换.
启发:save2word,WriteToWordFromMatlab,Quick_Figure,MATLAB控制和编写PowerPoint,saveppt2,subplotPPT,粘贴Matlab图形到Excel,聪明的PowerPoint出口国
这个问题是如何在现有的幻灯片页面上添加图片,而不是添加一个新的页面。
亲爱的所有,
用“Range”而不是“Add”的方法解决了上述问题。
我和布莱恩有同样的问题。我已经使用这个程序很多年了,但是现在使用Office365,它随机不关闭powerpoint应用程序,matlab挂起。如果我在任务管理器中结束powerpoint过程,我的脚本就会起飞并继续。有什么解决办法吗?
我想这可能对Office 365不起作用。有人调查过吗?Office 365是强加给我的,我会非常想念saveppt。
有办法把。fig文件也嵌入到幻灯片上吗?
嗨,马克,这看起来是一个很好的提交。我有点担心在我的工作中使用它,因为没有BSD许可证。你能说明一下这次提交的许可证吗?
埃里克,非常感谢你的补救。这将对我和我的实验室团队有很大帮助。很感激!
谢谢埃里克。我还有Office 2007,虽然我的公司说Office 2010很快就会部署。2013年没有希望了。我将尝试你修复我的旧版本的PowerPoint。
大家好,对于那些在使用PowerPoint 2013时遇到错误的人,为了纠正这个问题,你可以替换以下行:
pic1 =调用(new_slide.Shapes,“粘贴”);
用下面两行:
picShapeRange =调用(new_slide.Shapes,“粘贴”);
pic1 =调用(picShapeRange“项目”1);
这个修复在使用旧版本的PowerPoint时仍然有效。
我和JC和Silin在2013年调到Powerpoint后遇到了同样的问题。有人找到解决办法了吗?
谢谢,
知识范围
嗨,马克,
我和JC有同样的问题。代码:
pic_H = (pic1,“高度”);
失败,并且我已安装Powerpoint 2013。您是否知道一种变通方法,使其与microsoft office 2013兼容?
谢谢,
SD
马克,
谢谢你的建议。我在粘贴之后添加了暂停,但这并没有解决问题(即使有5秒的暂停)。
我在循环中调用saveppt,但是失败发生在第一次,就在第一张图片被粘贴到第一张幻灯片之后。它没有居中,文件没有保存。
在调试器中,pic1对象被设置为:
< 1 x1 Interface.Microsoft_PowerPoint_14.0_Object_Library.ShapeRange >
谢谢,
JC
JC,
很抱歉听到这个问题。我还没有PowerPoint 2013,所以我不能确定到底发生了什么。我用谷歌搜索了错误代码,它可能与一个无效对象(pic1)有关。如果您正在循环调用savePPT,PowerPoint可能无法跟上进度,可能会落后。尝试在调用savePPT后放置一个>>暂停(0.5)语句。第二种方法是运行调试器并检查“pic1”对象,以查看它是否有效。如果我能找到PPT 2013的副本,我将尝试进行更多的调试。祝你好运
马克
这是一个非常有用的函数。只是被转移到了Powerpoint 2013。
我得到以下错误:
使用Interface.Microsoft\u PowerPoint\u 14.0\u Object\u Library.shaperage/get时出错
错误:对象返回错误代码:0x800A01A8
run_report>saveppt错误(第522行)
pic_H = (pic1,“高度”);
类似的错误出现在下一条语句中:
设置(图1,'左'),单((双(幻灯片W)-双(幻灯片W))/2);
任何建议都将非常感谢。
谢谢,
JC
拉维,
SavePPT的工作方式是将图形复制到Windows剪贴板,并且只支持BMP和META格式。金宝app(> >文档打印)。你可以试试其他受SavePPT启发的作品。对于TIFF,他们必须创建一个。TIFF文件并将其读入Powerpoint。我不知道他们中是否有人这样做。好运!
马克
只是想知道,是否有一种方法可以使用您的代码来保存*.tif图像在幻灯片上。
我尝试使用,print('-dtiff',prnopt),但我一直得到这个错误
警告:“tiff”驱动程序生成的文件无法发送到打印机。
以“figure1.tif”为名保存到磁盘的文件。
> In graphics\private\name at 74
出版日期:209
在saveppt中,第69页
在getOutputPresentation>中,getclinicalplot位于1817
在getOutputPresentation的1018处
如果你有任何建议或建议,请让我知道。谢谢
拉维
谢谢,非常有用!
是的,这是一个非常有用的程序。我用它把许多数字集合成一个有组织的报告。
我发现现在我有一个演讲,我想在这个演讲中增加更多的数字。那么我应该在saveppt中做些什么更改,这样它就不会调用新的幻灯片,而是遍历现有的幻灯片(从我指定的幻灯片开始),并将图形粘贴到这些幻灯片上。(我可以定位数字和大小,这样他们就不会踩到这些幻灯片上的数字。)谢谢
找到了一个工作周围的ppt。可见= 0不工作。
op =调用(ppt.Presentations,“添加”,0)
从2010年PPT开始,您不能再隐藏应用程序(PPT . visible =0)。你只能最小化它(ppt。然而,你仍然可以打开隐藏的演示文稿使用
op =调用(ppt.Presentations,“开放”,文件规范,[],[],0);
太好了。我如何复制的数字作为增强元文件(所以图像是准确地保存)?谢谢。
对于我的应用程序,我需要自动调整图像大小以适应ppt幻灯片。这很简单,我想我应该分享一下它是如何完成的,以防其他人也这么做。我发现插入:
%大小图片以适合幻灯片
套装(图片1,“宽度”,单张(幻灯片)
如果pic1。高度> slide_H *。8
套件(图1,“高度”,单件(滑动高度*.8))
结束
代码块上面:
%获取图片的高度和宽度:
pic_H = (pic1,“高度”);
pic_W = (pic1“宽度”);
对我起了作用
我有标准的公司设计模板,我想纳入时,ppt开始。有什么快速的方法吗?
至于在linux中的Matlab上运行的等效例程,并将数据导出到非ms PowerPoint的等效程序(即OpenOffice),我还没有看到任何人实现这一点。
由于Linux不使用ActiveX,它将不得不使用一些不同的协议,以使图形图形进入OpenOffice。
我对此很感兴趣,并欢迎人们在这方面取得任何进展。我想通过学习更多关于OO和Linux剪贴板的知识,这是可以做到的。
我们倾向于使用Matlab的另一种方法
而是直接使用.EPS图形生成LaTeX输出
在Matlab生成的。这涉及到简单的ASCII文本
生成(像fprintf命令)。LaTeX也有一个类似PPT的功能,在Slitex中,现在已经被LaTeX2e中的“slides”文档类所取代。可以将图形移植到ppt样式的文档中。尽管它不是真正的PPT,但看起来很像。
现在,我们有一些脚本来生成LaTeX生成的报告样式的文档,其中嵌入了Matlab图形。这一切都是自动完成的,因此.tex代码与.eps图形文件同时生成。tex文件也可以通过Matlab编译,生成带有该图的PDF成品
嵌入图形。
看起来这将是一个相当简单的扩展
这个现有的代码,并使用它来移植Matlab图形到一个
基于Latex的简报图表样式(幻灯片文档类)。
如果有人想了解更多信息,请告诉我。
我不认为LaTeX“slides”documentclass在制作动画等方面比PPT/OOT更出色。但是,如果您主要希望Matlab生成一个文档,将大量图形合并到一个文件中(以便于查看和数据分析),那么它可以在Linux平台上满足这些需求。
这里是一个简单的例子,说明我如何使用pushbutton 1来生成图形,以及使用pushbutton 2中的saveppt。
%——在pushbutton1中按下按钮时执行。
函数pushbutton1_Callback(hObject, eventdata, handles)
%HOBOT手柄至按钮1(见GCBO)
% eventdata保留-将在MATLAB的未来版本中定义
%使用句柄和用户数据处理结构(参见GUIDATA)
数字
x = -π:π/ 10:π;
Y = tan(sinx) - sin(x);
情节(x, y,“——rs”,“线宽”,2,…
“MarkerEdgeColor”、“k”,……
‘MarkerFaceColor’,‘g’,……
“MarkerSize”,10)
%——在pushbutton2中按下按钮时执行。
函数pushbutton2_Callback(hObject, eventdata, handles)
pushbutton2的% hObject句柄(参见GCBO)
% eventdata保留-将在MATLAB的未来版本中定义
%使用句柄和用户数据处理结构(参见GUIDATA)
%建立有效的文件名:
saveppt
我只是不明白下面的代码将如何捕获当前的图形。需要一些帮助,让我嵌入到我的GUI。
%捕获当前图形/模型到剪贴板:
如果输入参数个数< 3
打印-dmeta
其他的
打印(-dmeta, prnopt)
结束
这是非常有用的。
有谁知道列出ActiveX对象的好资源吗?我还希望能够添加带有文本框的幻灯片。
谢谢
作者或其他人是否知道是否有一个等效的例程,可以在linux中的Matlab上运行,并将图形导出到非ms PowerPoint的等效程序(如OpenOffice或StarOffice)。
谢谢!杰夫
我不知道这是否是一个bug(在数据库中找不到它),但似乎当通过剪贴板使用.emf选项复制时,虚线在数字中转换为正常。这是刺激!
不过,如果你先将图片保存到.emf文件中,然后使用PowerPoint中的“插入图片->From文件”来导入图片,一切都很好。
这可以通过修改saveppt自动完成。m将图形保存到临时emf文件中,而不是剪贴板。
1.改变行
%捕获当前图形/模型到剪贴板:
打印('-dmeta',prnopt);
来
%保存当前的数字/模型到一个临时emf文件
Emffile = fullfile(fpath, 'resfig.emf');
打印(-dmeta, prnopt emffile);
2.改变
粘贴剪贴板的内容:
pic1 =调用(new_slide.Shapes,“粘贴”);
来
%插入emf文件的内容
pic1 =调用(new_slide.Shapes AddPicture, emffile,真的,真的,0,0,…
幻灯片W,幻灯片H);
%删除临时文件
删除(emffile);
更正:)。添加pt.delete并不能解决activeX服务器自行运行的问题,正如我在上一篇评论中所说的:)。
不过,有一个简单的解决方案,也可以使许多数字的输出速度更快。只需要提供一个图形句柄数组作为函数的附加参数,并将循环移动到应用程序中的图形上。类似的
函数savepptmany(filespec、figvec、titletext、prnopt)
[...]
%使用PowerPoint启动ActiveX会话:
ppt = actxserver(“PowerPoint.Application”);
如果~exist(filespec,'file');
创建新的演示文稿:
op =调用(ppt.Presentations '添加');
其他的
%打开现有演示文稿:
op =调用(ppt.Presentations,“开放”,文件规范,[],[],0);
结束
%循环数字
For addfig = 1:length(figvec)
图(figvec(addfig));
%捕获当前图形/模型到剪贴板:
如果输入参数个数< 3
打印-dmeta
其他的
打印(-dmeta, prnopt)
结束
%获取当前幻灯片数:
slide_count = (op.Slides“计数”);
%添加一个新的幻灯片(带有标题对象):
slide_count = int32(双(slide_count) + 1);
new_slide =调用(op.Slides,‘添加’slide_count 11);
[...]
%页面中央图片(标题区域下方):
设置(图1,'左'),单((双(幻灯片W)-双(幻灯片W))/2);
设置(图1,“顶部”,单(双(滑动)-双(图H));
结束
如果存在~(文件规范,“文件”)
%保存文件为新:
调用(op SaveAs,文件规范,1);
其他的
%保存现有文件:
调用(op '保存');
结束
[...]
注意,titlettext现在必须是字符串的单元格数组。
我不是ActiveX的专家,但添加
ppt.delete;
在saveppt的结尾。M似乎解决了在保存大量图像时超前运行的问题。优秀的应用程序!
超级!
伟大的工作。
在我的PC上,居中高度的位置看起来不太好。
将第100行改为
设置(pic1,“顶级”,单((双(slide_H) -双(pic_H)) / 2));
对我来说,它看起来不太好。
也许是一只小虫子?
神奇的工作。
我只是想知道是否有可能导出多个matlab图形到同一幻灯片?
这是一个有用的插件文件
64位计算机的修复方法是,当捕获当前图形/模型到剪贴板时,将print命令上的标志从print -dmeta更改为print -dbitmap
仅供参考,线形图和图像在32位计算机上工作;图像在64位计算机上不工作。这两台计算机都使用Matlab2006b、Windows XP和PowerPoint 2003。
首先,这是一个非常有用的函数!但是…该函数的工作伟大的线图(即Matlab图形从plot),但如果我试图保存图像(即Matlab图形从imagesc)数据区域是黑色的。有其他人经历过这种影响吗?有解决这个问题的方法吗?我在64位计算机上使用Matlab 2006b和Windows XP。
啊,命令是:
pic2 =调用(new_slide.Shapes AddPicture, pic_path, 0, 1, imgleft, imgtop, imgwidth, imgheight);
我感兴趣的是稍微改变这个函数,包括插入jpeg而不是使用副本的选项
用矢量图形粘贴方法。我发现这样做
我手动得到了一个更干净的图像,结果就更少了
取决于用户屏幕分辨率。
但问题是,我对COM/ActiveX对象并不熟悉
我不知道该怎么做,也不知道去哪里找资源
关于实现这个的信息。
目前,我可以在powerpoint中直接运行VB脚本
下面的命令:
ActiveWindow.Selection.SlideRange.Shapes.AddPicture filenam(文件名:=
e', LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:='XX',
上图:= ' XX ',宽度:= ' XX ',高度:= ' XX ')。选择
其中'filename'是我可以用matlab指向的文件,而'XX'
是一个可以定义的数。任何帮助都将不胜感激。
这可能是我从这个网站下载的最有用的文件之一。非常容易使用。
非常有用的文件。我也遇到了同样的问题。我写了以下宏,可以在Powerpoint中使用来解决这个问题:
子BringTitleToFront ()
ActiveWindow.View.GotoSlide 1
计数器=0
当计数器< ActivePresentation.Slides.Count
ActiveWindow.Selection.SlideRange.Shapes.Title.ZOrder msoBringToFront
Counter = Counter + 1
ActiveWindow.View.GotoSlide指数:=
循环
ActiveWindow.Selection.SlideRange.Shapes.Title.ZOrder msoBringToFront
ActiveWindow.View.GotoSlide 1
终止子
打开你的简报。按Alt-F11。插入一个模块。复制并粘贴上面的代码。然后运行宏。
当您开始更频繁地修改文件时,另一个有用的资源是读取与“publish”命令关联的mxdom2ppt.m文件。
或者,您也可以指定要使用的模板文件。模板应该在本地工作目录中。我把这个放到saveppt中。在创建/打开powerpoint文件后,立即打开。请参见下面的代码。
“my_template.pot”template_file = fullfile (pwd);
调用(op, ApplyTemplate template_file);
我无法得到比尔所罗门建议的字体修改如下(2004-12-02)。我发现如果你想直接在saveppt中修改字体。m”脚本,添加
集(new_slide.Shapes.Title.TextFrame.TextRange.Font,“名字”,“天线”);
在第89行之后,文本被插入到title对象中。
这是一个非常方便的工具,也是如何使用MATLAB控制PowerPoint的一个很好的示例。不过,有一个问题:有人知道如何将其调整为“特殊粘贴”,因为我发现我的绘图作为增强的图元文件工作得更好(否则纵横比是错误的)。
这是一个非常方便的脚本。如果你不想要ppt的话。如果你不想让幻灯片真正打开(变得可见),你可以做以下更改:
注释掉“ppt。可见= 1”
change op=invoke(ppt.Presentations,'Open',filespec);
to op=invoke(ppt.Presentations,'Open',filespec,[],[],0);
这将使powerpoint在打开时隐藏演示文稿,因此不要求程序窗口可见。
伟大的工作!如果你也可以改变ppt中的位置,那就太好了……
好了。很好。省去了在ppt中添加大量fig文件的苦差事。谢谢!
神奇的节省时间。请阅读David Abraham关于修复Office 2002/2003兼容性的评论。
智能:)
对不起:在我的环境中,powerpoint使用adobeacrobat工具将文件保存为pdf。这样,当PPT启动时,Adobe徽标就会放在剪贴板上,而Matlab的图形就会丢失。我知道要处理好每个人的环境是很困难的……谢谢你,无论如何。
字体问题可以通过在matlab脚本中显式指定字体来解决(否则powerpoint只分配默认字体)。在你的情节脚本中加入以下内容:
集(0,“DefaultAxesFontName”,“天线”)
非常有用和节省时间!我的问题:字体会改变-在matlab图中我有Arial字体,但在ppt中我看到Times New Roman字体。为什么?
不错的工作
很好,我们用这个
谢谢你
这正是你所需要的,如果你必须分享很多图形给非matlab用户
!!
太神了
酷……非常感谢。我遇到的一个问题是,这个数字盖过了标题。
否则,优秀的
易于使用和实时节省时间。
好工作!
我发现这是一个非常有用的工具!升级到Office 2002时,我确实发现了一个小问题-在这种情况下,在发出“复制到剪贴板”命令之前,必须打开Powerpoint。只需反转宏中的这些代码行即可使其工作。这是因为Office剪贴板与系统不同,并且只有在P粘贴时PT正在运行!
在准备Powerpoint演示文稿时非常方便。
非常有用!应纳入作为Matlab的一个标准部分。
非常有用!
对于Matlab 5.3 (R11)的ppt actxserver必须是可见的(ppt. visible =1;在saveppt函数中)只在文件被打开时,而不是在新文件被创建时。粘贴图片的尺寸也需要做小。
非常有用的功能,特别是当有许多图导出到ppt使用循环。如果在第一个图形之后循环挂起,只需在saveppt()调用之后添加一个pause(),以便在每次插入图形之后让activex服务器正确关闭。
太好了。节省了我太多太多的时间!
我发现它需要一个暂停(0.01)或在保存每个表单之后,因为否则它会提前运行并崩溃。