记录一下,嵌入ppt程序遇到的问题。。。。。。。。。。。。。。。。。。。。。。。。。。。
在网上找了很多资料,关于嵌入ppt浏览ppt的例子和方法,使用下来都是一大推问题。。
最后选择了打开ppt程序,把ppt程序嵌入页面UI中这个方法,但同样问题都一抹多,庆幸问题最后都有惊无险解决掉了
1、office asstant 没有安装
在程序中第一次写下代码,直接打开ppt程序,当时就抛异常:office asstant not install.
using POWERPOINT = Microsoft.Office.Interop.PowerPoint;
using OFFICECORE = Microsoft.Office.Core;
objApp = new POWERPOINT.Application();
objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoTrue, OFFICECORE.MsoTriState.msoTrue, OFFICECORE.MsoTriState.msoFalse);
搞人心态,网上也查不到什么原因,难道大家都没有遇到过吗。。
其实我估计也是office环境问题,同事运行我这段代码是没问题的,最后把同事的office环境给搞过来了。
原来我用的office是2013版本的,最后换成了2016,然后安装了三个插件,不知道是版本还是插件问题,没下去深究。
2、第一次打开ppt并浏览了后,关闭界面,然后第二次浏览ppt,究抛异常了,原因是第一次打开的ppt程序并没有关闭。。。怪自己太辣鸡了,技术差,哈哈哈
下面是ppt嵌入的效果,没有直接嵌入ppt编辑界面,直接嵌入的是ppt的播放界面。
最后贴一段代码,打开ppt嵌入界面的。
using POWERPOINT = Microsoft.Office.Interop.PowerPoint;
using OFFICECORE = Microsoft.Office.Core;
POWERPOINT.Application objApp = null;
POWERPOINT.Presentation objPresSet = null;
POWERPOINT.SlideShowWindows objSSWs;
[DllImport("user32.dll")]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll")]
public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint);
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int fLag);
public void PPTOpen(string filePath)
{
try
{
//打开一个ppt程序
objApp = new POWERPOINT.Application();
ShowWindow((IntPtr)objApp.HWND, SW_HIDE);
//打开一个ppt,隐藏编辑窗口.
//Open的三个参数:ppt路径,是否只读,是否显示标题,是否显示ppt编辑界面
objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoTrue, OFFICECORE.MsoTriState.msoTrue, OFFICECORE.MsoTriState.msoFalse);
//objPresSet.SlideShowSettings.ShowType这个属性值建议自己去尝试,每个对应的 值会有不同的惊喜哦,就不贴每个属性对应值得效果图了
objPresSet.SlideShowSettings.ShowType = PpSlideShowType.ppShowTypeWindow;
//设置该属性是为了防止ppt播放完毕后弹出是否保存界面
objPresSet.Saved = OFFICECORE.MsoTriState.msoTrue;
objSlides = objPresSet.Slides;
if (objSlides.Count == 0)
{
MessageBox.Show("空白幻灯片,不能播放");
return;
}
//开始播放ppt
objSSS = this.objPresSet.SlideShowSettings;
slideShowWindow = objSSS.Run();
//没嵌入之前隐藏播放窗口
ShowWindow(GetParent(GetParent((IntPtr)slideShowWindow.HWND)), SW_HIDE);
//移动ppt程序界面到程序中 slideShowWindow.HWND传入的是ppt播放界面的句柄,如果
//想嵌入ppt编辑界面,也可传objApp.HWND
EmbedProcessEx((IntPtr)slideShowWindow.HWND, panelTeachContent);
}
catch (Exception ex)
{
}
}
private bool EmbedProcessEx(IntPtr nHwnd, Control control)
{
IntPtr hwnd = (IntPtr)nHwnd;
if (control == null || hwnd == IntPtr.Zero) return false;
try
{
SetParent(hwnd, control.Handle);
MoveWindow(hwnd, 0, 0, control.Width, control.Height, true);
}
catch (Exception ex)
{
return false;
}
return true;
}
最后,就酱紫吧。。。。文章来源:https://www.toymoban.com/news/detail-450743.html
同理,其他语言也类似,用了w32API的SetParent和MoveWindow文章来源地址https://www.toymoban.com/news/detail-450743.html
到了这里,关于c# Winform 程序嵌入PPT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!