【问题标题】:Select into view a slide master page with PowerPoint Interop使用 PowerPoint 互操作选择以查看幻灯片母版页
【发布时间】:2017-04-10 09:31:27
【问题描述】:

是否可以在 C# 中使用的 PowerPoint Interop 中以编程方式选择幻灯片母版页进入视图,就像选择常规幻灯片一样?通过提供该母版页的 ID 或从将其作为模板的幻灯片中提供。

我设法将视图切换到幻灯片母版:

_pptApplication.ActiveWindow.ViewType = PpViewType.ppViewMasterThumbnails;

我尝试先选择一张幻灯片,然后切换到母版视图,但此指令始终显示第一张幻灯片母版页,而不是与所选幻灯片关联的页面。

同样,我想知道这是否适用于笔记、讲义及其母版。

【问题讨论】:

    标签: c# .net powerpoint office-interop


    【解决方案1】:

    您需要在 CustomLayout 对象上使用 .Select() 方法,此外还需要设置 .ViewType,就像您已经知道的那样。

    这里有两个例子:

    using NetOffice.OfficeApi.Enums;
    using NetOffice.PowerPointApi.Enums;
    using System;
    using PowerPoint = NetOffice.PowerPointApi;
    
    namespace ExportSlides
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var app = PowerPoint.Application.GetActiveInstance())
                {
                    SelectSlideMasterLayoutOfActiveSlide(app);
                    ActiveSlideMasterLayoutByIndex(app.ActivePresentation, 4);
                }
            }
    
            private static void ActiveSlideMasterLayoutByIndex(PowerPoint.Presentation activePresentation, int customLayoutIndex)
            {
                activePresentation.Windows[1].ViewType = PpViewType.ppViewSlideMaster; //PpViewType.ppViewMasterThumbnails doesn't work for me for some reason
                activePresentation.SlideMaster.CustomLayouts[customLayoutIndex].Select();
            }
    
            private static void SelectSlideMasterLayoutOfActiveSlide(PowerPoint.Application app)
            {
                var activeWindow = app.ActiveWindow;
    
                var slideObj = activeWindow.View.Slide;
    
                if (slideObj.GetType() == typeof(PowerPoint.Slide))
                {
                    var slide = (PowerPoint.Slide)slideObj;
    
                    activeWindow.ViewType = PpViewType.ppViewSlideMaster; //PpViewType.ppViewMasterThumbnails doesn't work for me for some reason
    
                    slide.CustomLayout.Select();
    
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢,我不知道CustomLayout 是关键。不过要说一句:当我尝试这个时,它在比较 slideObj.GetType() == typeof(PowerPoint.Slide) 时不起作用,而是我不得不将 activeWindow.View.Slide 转换为 Slide 然后它起作用了。
    • 还有一个问题:我注意到,在按索引选择时,您无法选择第一张幻灯片母版页。有没有类似的方法可以做到这一点?
    • 如果我没记错的话,如果您选择 ViewType,我认为您会自动到达那里,所以请尝试将值设置为其他值并返回...这样行吗?
    • 是的,它是这样工作的。我试图避免弄乱 ViewType,因为它有一个不受欢迎的副作用:它会从您活动的任何窗口中窃取焦点并将其设置为 PowerPoint 应用程序。
    • 我似乎找不到其他方法。或许你可以让当前的活动窗口总是在顶部,然后设置 ViewType,然后让它不再总是在顶部?
    猜你喜欢
    • 2012-12-06
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多