記錄一下,嵌入ppt程序遇到的問(wèn)題。。。。。。。。。。。。。。。。。。。。。。。。。。。
在網(wǎng)上找了很多資料,關(guān)于嵌入ppt瀏覽ppt的例子和方法,使用下來(lái)都是一大推問(wèn)題。。
最后選擇了打開(kāi)ppt程序,把ppt程序嵌入頁(yè)面UI中這個(gè)方法,但同樣問(wèn)題都一抹多,慶幸問(wèn)題最后都有驚無(wú)險(xiǎn)解決掉了
1、office asstant 沒(méi)有安裝
在程序中第一次寫(xiě)下代碼,直接打開(kāi)ppt程序,當(dāng)時(shí)就拋異常: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);
搞人心態(tài),網(wǎng)上也查不到什么原因,難道大家都沒(méi)有遇到過(guò)嗎。。
其實(shí)我估計(jì)也是office環(huán)境問(wèn)題,同事運(yùn)行我這段代碼是沒(méi)問(wèn)題的,最后把同事的office環(huán)境給搞過(guò)來(lái)了。
原來(lái)我用的office是2013版本的,最后換成了2016,然后安裝了三個(gè)插件,不知道是版本還是插件問(wèn)題,沒(méi)下去深究。
2、第一次打開(kāi)ppt并瀏覽了后,關(guān)閉界面,然后第二次瀏覽ppt,究拋異常了,原因是第一次打開(kāi)的ppt程序并沒(méi)有關(guān)閉。。。怪自己太辣雞了,技術(shù)差,哈哈哈
下面是ppt嵌入的效果,沒(méi)有直接嵌入ppt編輯界面,直接嵌入的是ppt的播放界面。
?
最后貼一段代碼,打開(kāi)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
{
//打開(kāi)一個(gè)ppt程序
objApp = new POWERPOINT.Application();
ShowWindow((IntPtr)objApp.HWND, SW_HIDE);
//打開(kāi)一個(gè)ppt,隱藏編輯窗口.
//Open的三個(gè)參數(shù):ppt路徑,是否只讀,是否顯示標(biāo)題,是否顯示ppt編輯界面
objPresSet = objApp.Presentations.Open(filePath, OFFICECORE.MsoTriState.msoTrue, OFFICECORE.MsoTriState.msoTrue, OFFICECORE.MsoTriState.msoFalse);
//objPresSet.SlideShowSettings.ShowType這個(gè)屬性值建議自己去嘗試,每個(gè)對(duì)應(yīng)的 值會(huì)有不同的驚喜哦,就不貼每個(gè)屬性對(duì)應(yīng)值得效果圖了
objPresSet.SlideShowSettings.ShowType = PpSlideShowType.ppShowTypeWindow;
//設(shè)置該屬性是為了防止ppt播放完畢后彈出是否保存界面
objPresSet.Saved = OFFICECORE.MsoTriState.msoTrue;
objSlides = objPresSet.Slides;
if (objSlides.Count == 0)
{
MessageBox.Show("空白幻燈片,不能播放");
return;
}
//開(kāi)始播放ppt
objSSS = this.objPresSet.SlideShowSettings;
slideShowWindow = objSSS.Run();
//沒(méi)嵌入之前隱藏播放窗口
ShowWindow(GetParent(GetParent((IntPtr)slideShowWindow.HWND)), SW_HIDE);
//移動(dòng)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;
}
最后,就醬紫吧。。。。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-450743.html
同理,其他語(yǔ)言也類似,用了w32API的SetParent和MoveWindow文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-450743.html
到了這里,關(guān)于c# Winform 程序嵌入PPT的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!